Skip to main content

Provides a mail content type and a mail-in behavior

Project description


ftw.mail provides a dexterity based mail contenttype which allows you to upload emails to your Plone site. This includes extracting of important data of the email, like:

  • Attachments

  • Mail header

  • Body text

  • Unwrap attached emails (msg).

Mail-Inbound functionality

The major feature of ftw.mail is the inbound mail functionality. Mail inbound allows you to send emails directly to your Plone site. An email sent to Plone will be extracted and created as mail contenttype automatically.


  1. There must be a registered user with the sender email address

  2. The user must have enough permissions to add a mail object in the folder

  3. The email will be created with the security context of the sender

What is the email address?

The localpart of the email address is a unique identifier that identifies the respective folderish object. The default implementations uses the object’s UUID. The mail-in address will automatically shown in a viewlet if ftw.mail.mail content type is addable.


  • Add ftw.mail to your buildout configuration:

eggs +=
  • Install the generic setup import profile.

Enable Mail-Inbound Feature

Install the script somewhere in the PATH of your server. Make sure is executable (chmod +x

Example Postfix configuration in /etc/postfix/virtual: anything inbound-example

Example /etc/aliases:

inbound-example: "|/path/to/"

Remember to run the newaliases command (as root) after you update /etc/aliases in order for Postfix to pick up the changes.

For local testing it is also possible to start the in a console and paste the raw mail to STDIN:

./ recipient-email

(Since the script will read from STDIN, you’ll need to send an EOF using CTRL-D after you pases the mail contents.)


Runs with Plone 4.3.


2.7.5 (2023-01-31)

  • Handle more cases of cropped attachment filenames. [lgraf]

2.7.4 (2022-11-15)

  • Handle cropped filenames of attachments. [phgross]

2.7.3 (2021-10-22)

  • Make title extraction from mail subject more decondig error-tolerant. [phgross]

2.7.2 (2021-07-27)

  • Fix download of mail attached to mail. [njohner]

  • Use mail subject as filename for eml attachments with missing filename. [njohner]

2.7.1 (2021-07-07)

  • Handle missing filename for EML attachments. [njohner]

2.7.0 (2020-06-09)

  • Add special handling for signed/multipart message attachments. [deiferni]

2.6.2 (2020-06-08)

  • Improve header decoding when encoded words are not separated by whitespace. [mbaechtold]

2.6.1 (2019-07-08)

  • Fix upgrade when uninitialized header chaches are present. [deiferni]

2.6.0 (2019-03-22)

  • Drop support for Plone 4.2. [lgraf]

  • Log common errors in inbound mail view. [lgraf]

2.5.5 (2018-09-21)

  • Recurse the sizes of nested multipart attachments. [Rotonen]

2.5.4 (2017-11-24)

  • Fix treatment of invalid mail dates [njohner]

2.5.3 (2017-11-23)

  • Fix sorting on dates for E-mails [njohner]

2.5.2 (2017-07-11)

  • Cleanup: Revert LWSP regex and move changes from v2.5.1 into a separate regex since they solve different issues.

2.5.1 (2017-05-23)

2.5.0 (2017-05-22)

  • Move functionality to create mailed-in mails to an adapter to allow easier customization. [deiferni]

2.4.1 (2017-05-22)

  • Fix setting defaults for choices with named vocabularies on inbound mails. [phgross]

2.4.0 (2016-07-19)

  • Mark inbound request with a marker interface. [phgross]

  • Drop Plone 4.1 support. [phgross]

  • Fix German and French FTI title of “ftw.mail.mail”. [mbaechtold]

2.3.7 (2015-09-08)

  • Fix broken <meta /> tags in text/html MIME parts. [lgraf]

2.3.6 (2015-09-02)

  • Sort Mailtab so the newest Mail is the first Item. [tschanzt]

2.3.5 (2015-08-20)

  • Make upgrade step to fix message.contentType more defensive to avoid trouble during upgrades caused by caching weirdness. [lgraf]

2.3.4 (2015-08-19)

  • Make sure message.contentType is stored as str, not unicode. Otherwise this will result in “Wrong contained type” when trying to save the object again. Includes Upgrade-Step to fix existing objects. [lgraf]

2.3.3 (2015-08-03)

  • get_header(): Fix up RFC 2047 encoded words separated by ‘CRLF LWSP’ (which is fine according to the RFC) by replacing the CRLF with a SPACE so decode_header can parse them correctly. This works around a bug in decode_header that has been fixed in 3.3. See and its duplicate. [lgraf]

2.3.2 (2015-06-30)

  • Make RegEx for Apple Partial Encoding regex more specific so we don’t accidentally remove quotes around header parts that need them. [lgraf]

  • Added test for zip export. [lknoepfel]

2.3.1 (2015-03-12)

  • Refactor mail view to include all HTML parts. [jone]

2.3.0 (2015-03-02)

  • Enable referencablebehavior for mails. [jone]

2.2.3 (2014-10-24)

  • Parse <style> tags inside the mail using the premailer transform. [phgross]

  • Made mail view XSS-save using the safe-html transform for the mail-body display. [phgross]

  • Fix an issue while generating links to image-attachments in mails. [deiferni]

2.2.2 (2014-08-28)

  • SearchableTextExtender: For mails with incorrectly declared charset, try decoding them as latin1 as a last resort, ignoring all errors. [lgraf]

  • SearchableTextExtender: Don’t just decode the Content-Transfer-Encoding, but also decode the actual content itself with the declared charset. [lgraf]

2.2.1 (2014-05-30)

  • Fix brown bag upgrade step from 2.2.0. [jone]

2.2.0 (2014-05-28)

  • Performance improvements:

    • Store the title from the mail subject on the object, so that we don’t have to read the message for retreiving the title on access.

    • Cache attachment infos on mail object.

    • Cache headers for tabbed view.


  • Make sure only a default value will be set for IMailSettings.mail_domain, but an existing value won’t be overwritten when running the upgrade step twice. [lgraf]

2.1.1 (2014-05-12)

  • Inbound view: Adapt container as the context instead of content when looking up default value adapter. [lgraf]

  • Inbound view: Remove AQ wrapper when setting default values for newly created objects, in order to not get bogus results (due to acquisition) when checking whether a field is already present on the object. [lgraf]

  • Fix From-/To-/Cc-Header encoding problem with Apple Mail. [jone]

  • Made primary field also for dexterity-1 installations working. [phgross]

  • Added French translation by I. Anthenien. [lknoepfel]

2.1.0 (2014-03-28)

  • Remove “validate_sender” configuration setting. We always require the sender to be valid. [jone]

  • Refactor inbound view so that customization and error-handling is easier possible. [jone]

  • Improve searchable text to index attachments recursively. [jone]

  • Added registry entry ‘mail_domain’ in upgrade step to 2000. [lknoepfel]

  • Fix tests for Plone 4.1.x - 4.2.x by using a compatible ftw.workspace version. [mathias.leimgruber]

2.0 (2013-10-21)

  • Make mail tab date parsing robust. [jone]

  • Disable sorting in mail tab for header information columns. Sorting header informations does currently not work because the information is not in the catalog. When doing it outside the catalog we could run into performance issues when we have many mails, therefore we disable it for now. [jone]

  • Use plone default classes for table styling. [Julian Infanger]

  • Fixed response content-type in inbound view. [lknoepfel]

  • Revoke “ftw.mail: Add Mail” permission. This permission makes the “mail” type show up in the add menu. Only admins (Manager) should be able to add new mails through the add menu, the normal use case is sending the mails via inbound. Also change the lawgiver hint to ingnore this permission. [jone]

  • Add ftw.lawgiver support. [mathias.leimgruber]

  • Add mail tab for ftw.workspace. [mathias.leimgruber]

  • Implement mail-in as viewlet. [mathias.leimgruber]

  • Add readme. [mathias.leimgruber]

  • Add IEmailAddress adapter, so it’s easy to change the behavior of generating the email address of a destination and getting the destination of a given email address.(Dropped the destination resolver) [mathias.leimgruber]

  • Add uuid support and drop intid. [mathias.leimgruber]

  • Use for mail content type’s default view. [mathias.leimgruber]

  • Ungrock the package. [mathias.leimgruber]

  • Fix test setup for plone 4.3 and intid. [mathias.leimgruber]

  • Add plone 4.3.x tests cfg and development.cfg. [mathias.leimgruber]

1.0.4 (2012-09-12)

1.0.3 (2012-06-18)

  • Fixed BeautifulSoup related encoding bug when unwrapping html body. [lgraf]

  • Fix filename encoding handling. [jone]

1.0.2 (2012-03-28)

  • Inbound mail: Get recipient from env variable set by MTA, not from To header. This allows for mails with multiple recipients in the To header, and the Plone destination address doesn’t need to be listed first anymore. Issue #1312 Fehler E-Mail mit mehreren Adressaten [lgraf]

  • Make intids work in tests (register IIntIds utility explicitely) [lgraf]

1.0.1 (2012-02-24)

  • Added some French translations [ttschanz]

1.0 (2011-11-17)

  • Fixed msg getter, it works now also with mails without a subject. [phgross]

1.0a11 (2011-10-04)

  • Fixing long subject headers separated by nt before creating email.message object. [lgraf]

  • Added test to test mail creation with weird characters in subject. [lgraf]

  • Normalizing subject before using it as an ID to create a mail object. [lgraf]

  • Changed default encoding to ‘utf-8’ for the safe_utf8 method. Should fix decoding problem in mail subjects. Issue #1209 Falsche Umlaute bei importierten Mails [phgross]

1.0a10 (2011-09-27)

  • changed fallback encoding in the get_payload method for msg objects without a correct charset information. So we could fix display errors in mails with non-ascii characters in the mail body. [phgross]

  • changed deprecated grok.CodeView to grok.View [eschmutz]

  • added test-buildout for plone 4.1 [eschmutz]

1.0a9 (2011-08-24)


  • Fixed message value creation: filename must be in unicode, that it works with the new plone.namedfile 1.0.3 [phgross]

  • Added dummy setter for title property so it doesn’t fail with an AttributeError when trying to set the title of a ftw.mail.mail object. [lgraf]

  • Added missing dependency on collective.dexteritytextindexer in [lgraf]

  • Pinned zope.component=3.8.0 in test-plone-4.0.x.cfg to resolve version conflict [lgraf]


  • Added DynamicTextIndexExtender to add message body to searchableText [lgraf]


  • Changed minor typo in German translation. [phabegger]


  • According to rfc 2047, multiple encoded words are seperated by space: fixed tests. [jbaumann]

  • Created safe_decode_header util function, which handles the encoding properly for get_filenames according to rfc 2047. This solves a test issue. [jbaumann]

  • Added support for nested multipart emails where the attachment is within another part of the message. [jbaumann]



  • Removed save_attachments: moved to opengever.mail since its opengever specific [02.11.2010, jbaumann]

  • Added remove_attachments method [01.11.2010, jbaumann]

  • Added test for filename encoding problem. Test still fails… [Thomas Buchberger]

  • Moved unwrapping of attached messages into utility method. Added test. [Thomas Buchberger]

  • Correctly restore current SecurityManger after mail creation. [Thomas Buchberger]

  • Added tests for unknown sender [Thomas Buchberger]



  • Initial release

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ftw.mail-2.7.5.tar.gz (649.7 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page