cmfmailin_install
Introduction
This is the first release version of CMFMailIn, which allows you to email into CMF. Each email that is sent to known CMF instance arrives in the CMF ready to be processed by your own methods or scripts.
Status
This is a release version and is actually in use by NIP. This release has been tested using the eXtreme Programming ( XP ) methodology and NIP's in-house product testing system. There are also unittests for the CMFMailIn Tool and the MailMessage content type. It is intended for people who wish to be able to get emails in to their own CMF Instances.
We've split the problem into a number of aspects:
- Getting the email from the mail system into a world we can program (Python).
- Getting the mail into CMF.
- Figuring out what to do with the mail once it is in CMF.
As we are targetting Unix (specifically Linux) we can get the MTA (Exim, or Sendmail, or most other MTAs) to send mail for a particular address to a script.
The setup has been developed and lightly tested using:
- Zope 2.5.1 running on Linux (Mandrake 8.1).
- Exim 3.14 as the mail transport. You can find more information about Exim at http://www.exim.org/. We believe it should also work with sendmail (the MTA normally found on Linux) but haven't tested it.
Contents
CMFMailIn is provided as a single tar archive. It contains the CMFMailIn Tool, MailMessage Content Type and sendMailToZope.py script
Installation
(In the following instructions, Zope_Home means your Zope directory, for example, /usr/local/zope.)
- Extract CMFMailIn-.tgz to your Zope_Home directory using tar zxvf CMFMailIn-.tgz
- Change the first line of Zope_Home/lib/python/Products/CMFMailIn/sendMailToZope.py to reflect your python location (whereis python).
- Make sure your MTA has permission to execute sendMailToZope.py
To check this, try it, for example if your MTA runs as the user mail, do su - mail and then ./sendMailToZope.py
chmod a+x sendMailToZope.py should fix any access problems, but don't forget to give your MTA permission to access the directory Zope_Home/lib/python/Products/CMFMailIn/ as well.
- Make sure your MTA (in our case, Exim) will deliver email to a program.
For Exim this means assuming Exim is installed and working you need to:
- Make sure that
pipe transports
are enabled.Check /etc/exim.conf for a section in transports like:
address_pipe: driver = pipe user = mail return_output
This is usually found in the default exim.conf file. To make CMFMailIn work for mailing lists add this line:
envelope_to_add = true
This forces Exim to add the
envelope-to
to the headers of the mail message. - Make sure that there is a director set up to handle pipes.
This will be in the same config file in the Directors section and will look something like:
pipe_transport = address_pipe
Again, this is already present in the default setup.
- Make sure that local_domains is configured to deliver local mail to
the host machine.
So, if your mail addresses are of the form [email protected] then you should have:
local_domains = foo.bar.baz
- Restart Exim (this step may not be needed for machines running Sendmail).
- Make sure that
- In the file /etc/aliases set up the appropriate pipe alias.
You also need to supply the location of your CMF instance as the
first arguement to this method. You will need to include any
username and password authentication.
For example - a line such as:
recipient: "|Zope_Home/lib/python/Products/CMFMailIn/sendMailToZope.py http://username:[email protected]/CMFInstance/"
- Restart Zope.
- Create a CMFMailIn Tool in you CMF Site.
From the add list select "CMFMailIn Tool". Then Tick "CMFMail In Tool" and Click
Add
- Add the CMFMailIn skins to your portal_skins tool
In the portal_skins tool, select from the add list "Filesystem Directory View"
In the
directory
field select "Products/CMFMailIn/skins/mailin", leave theid
field empty and clickadd
- Add the MailMessage content type to your portal_types
In the portal_types tool, select from the add list "Factory-based Type Information"
Leave the
id
field blank and in theuse default type information
field selectCMFMailIn: CMFMailMessage
, then clickadd
- In the
mailin
skin there is a default method that will handle all mail messages coming in to the CMF Instance.This method is called
mail_received
.The default mail_received method will take the local part of the destination email address of the mail message. (i.e. the localpart of
[email protected]
isandyd
) It will look for a Member Folder with the id equal to this localpart. If it finds the member folder it will create a MailMessage content type instance in the member folder with the id equal to the mail message's message-id header, and the content of the file will be the content of the email.You can, and i advise you to write your own mail_received script that will handle the incoming mail messages in a way that you see fit.
- To test the system send a mail to the address that you have configured in your MTA. (for example [email protected]) and it should appear in your CMF.
- In the
Support
This was written by a number of people at NIP. For help with this release contact New Information Paradigms Ltd - ZMailIn Support