Difference between revisions of "Procmail"

From HE FAQ
Jump to: navigation, search
Line 1: Line 1:
 +
{{1 prefix}}
 
This document demonstrates how to use procmail to automate mail handling.
 
This document demonstrates how to use procmail to automate mail handling.
General mail handling based on the subject line is discussed first to get you familiar with procmail. Handling multiple mailboxes is discussed at the end of this document.
+
General mail handling based on the subject line is discussed first to get you familiar with Procmail. Handling multiple mailboxes is discussed at the end of this document.
 +
= Getting Started with Procmail =
 +
You need to create a file named ".procmailrc" (note the ".") in the home directory of your account.  You can do this either by connecting to the server via SSH and using a text editor such as nano or vi, or you can create a file named, for instance, "procmail.txt" on your computer, upload the file to your account with an SFTP client the same way you would upload a web page, and then rename the file.
  
Assume we get three types of mail:
+
At the top of the file, include the following lines, making sure to change it to match your account's domain name:
 +
PATH=/usr/bin:/usr/local/bin                # Path Variables for the procmail session
 +
MAILDIR=/var/spool/mail/yourdomain.com      # Do not put 'www.' in front of your domain here
 +
LOGFILE=$HOME/procmail.log                  # Keeps a log of email routing
 +
VERBOSE=no                                  # Verbose Error Reporting --values (no|off yes|on)
 +
COMSAT=no                                  # set to no|off
 +
# SENDMAIL=/usr/bin/sendmail                # sendmail location (comment in procmail only)
  
#Information requests (generated by a web form) with the subject line: INFO REQUEST
+
The Procmail rules, sometimes called "recipes," will come after that.
#Orders (generated by a web form) with the subject line: ORDER
+
#Support requests (generated by a web form) with the subject line: SUPPORT REQUEST
+
  
 +
= Email Forwarding =
  
We want all three of these treated differently.
+
Here is a simple email forwarding rule:
  
'INFO REQUEST' needs to be saved into a folder called 'Marketing'. This is the most basic type of filtering.
+
:0
 +
* ^TO_somethinglocal@myHurricaneElectricHostedDomain.com
 +
! my_personal_address@someOtherDomain.net
  
'ORDER' needs to be saved in a folder called 'Sales' and a copy needs to be sent to 'joe' (joe@bigbusiness.com)$
+
'''Note:''' this forwards all mail, including spam. Please install [[SpamAssassin]] at the top of your .procmailrc file to limit the amount of spam your destination mailbox receives.
  
'SUPPORT' needs to be saved to a folder called 'Support', a copy mailed to the support team (support@bigbusiness.com) and an acknowledgment sent back to the person who send the mail. This is a custom autoresponder.
+
= Sorting into Folders =
  
SSH to the server.
 
Using pico (newer customers use nano) create '.procmailrc' in your home directory. In the '.procmailrc' file, you are going to put the following text which sets some environment variables:
 
 
PATH=/usr/bin:/usr/local/bin                # Path Variables for the procmail session
 
MAILDIR=/var/spool/mail/yourdomain.com      # Don't put 'www.' in front of your domain here
 
LOGFILE=$HOME/procmail.log                  # Keeps a log of email routing
 
VERBOSE=no                                  # Verbose Error Reporting --values (no|off yes|on)
 
COMSAT=no                                  # set to no|off
 
# SENDMAIL=/usr/bin/sendmail                # sendmail location (comment in procmail only)
 
 
 
Adding the following text will match everything with 'INFO REQUEST' in the Subject line and save it to the folder 'Marketing'.
 
Adding the following text will match everything with 'INFO REQUEST' in the Subject line and save it to the folder 'Marketing'.
  
Line 33: Line 33:
 
  Marketing
 
  Marketing
  
Adding the following text will match everything with 'ORDER' in the subject line and save it to the folder Sales' and then send it to joe@bigbusiness.com.
+
= Custom Autoresponders =
 
+
:0
+
* ^Subject:.*ORDER
+
+
  :0 c
+
  ! joe@bigbusiness.com
+
  :0
+
  Sales
+
}
+
  
Adding the text below will match everything with 'SUPPORT' in the Subject line and save it to the folder 'Support', then send it to support@bigbusiness.com and return an acknowledgment to the user who sent the support request.
+
Adding the text below will match everything with 'SUPPORT' in the Subject line and return an acknowledgement to the user who sent the support request.
  
 
This is a little more difficult to understand. Make sure that 'SUPPORT' is in the Subject line and that it does not contain data from 'FROM_DAEMON' (listserv's and auto-mailers are suppose to put this in their headers.)
 
This is a little more difficult to understand. Make sure that 'SUPPORT' is in the Subject line and that it does not contain data from 'FROM_DAEMON' (listserv's and auto-mailers are suppose to put this in their headers.)
Line 58: Line 49:
 
       | (formail -t -r -A"X-Loop: john_doe@bigbusines.com " ; \
 
       | (formail -t -r -A"X-Loop: john_doe@bigbusines.com " ; \
 
       cat /home/your_account/acknowlegement.txt ) | $SENDMAIL -t
 
       cat /home/your_account/acknowlegement.txt ) | $SENDMAIL -t
    :0 c
 
      !support@bigbusiness.com
 
    :0
 
      Support
 
 
   }
 
   }
  
To separate mail by sender (From line) use the following text which will cause any mail from joe@bigbusiness.com to be stored in the folder 'BigBoss'.
+
= Examples of Combining Rules =
 +
 
 +
Adding the following text will match everything with 'ORDER' in the subject line and save it to the folder Sales' and then send it to joe@bigbusiness.com.
  
 
  :0
 
  :0
  * ^From:.*joe@bigbusiness.com
+
  * ^Subject:.*ORDER
  BigBoss
+
 +
  :0 c
 +
  ! joe@bigbusiness.com
 +
  :0
 +
  Sales
 +
  }
  
To cause a rule to be applied only to specific mailbox you simply add another line to the rule which requires the To: line to match. Note that in the presence of multiple mailboxes all rules are checked, so this means that a rule that doesn't check who an email is to will be applied to all incoming email.
+
To separate mail by sender (From line) use the following text, which will cause any mail from joe@bigbusiness.com to be stored in the folder 'BigBoss'.
 
+
 
+
Here is a simple email forwarding rule:
+
  
 
  :0
 
  :0
  * ^TO_somethinglocal@myHurricaneElectricHostedDomain.com
+
  * ^From:.*joe@bigbusiness.com
  ! my_personal_address@someOtherDomain.net
+
  BigBoss
  
'''Note:''' this forwards all mail, including spam. Please install [[SpamAssassin]] at the top of your .procmailrc file to limit the amount of spam your destination mailbox receives.
+
The following text will cause any mail sent to register@yourvirtualhost.com to be stored in the folder 'Registrations'.  This can be handy if the mail being sent to register@yourvirtualhost.com is actually being forwarded to another address, because the email's entire history is preserved, and Procmail will know who the original recipient was supposed to be.
 
+
 
+
The following text will cause any mail sent to register@yourvirtualhost.com to be stored in the folder 'Registrations'.
+
  
 
  :0
 
  :0
Line 88: Line 76:
 
  Registrations
 
  Registrations
  
 
+
Here's a modification of the autoresponder used above: mail sent support@yourvirtualhost.com triggers an autoresponse, is saved to a folder ("Support"), and a copy is forwarded (to support@bigbusiness.com).
 
+
To modify the autoresponder rule used above to respond to mail sent to support the follow would be used.
+
  
 
  :0
 
  :0
Line 96: Line 82:
 
  * !^FROM_DAEMON
 
  * !^FROM_DAEMON
 
  * !^X-Loop: john_doe@bigbusiness.com
 
  * !^X-Loop: john_doe@bigbusiness.com
# The rest of the rule follows below
+
  {
 
+
    :0 h c
To modify the autoresponder rule used above to respond to mail sent to support the follow would be used.
+
      | (formail -t -r -A"X-Loop: john_doe@bigbusines.com " ; \
 
+
      cat /home/your_account/acknowlegement.txt ) | $SENDMAIL -t
:0
+
    :0 c
* ^TO_support@yourvirtualhost.com
+
      !support@bigbusiness.com
* !^FROM_DAEMON
+
    :0
* !^X-Loop: john_doe@bigbusiness.com
+
      Support
# The rest of the rule follows below
+
  }

Revision as of 18:05, 11 January 2012

This information only pertains to Hurricane Electric's Shared Web Hosting package. There may be different information in our other categories.

This document demonstrates how to use procmail to automate mail handling. General mail handling based on the subject line is discussed first to get you familiar with Procmail. Handling multiple mailboxes is discussed at the end of this document.

Getting Started with Procmail

You need to create a file named ".procmailrc" (note the ".") in the home directory of your account. You can do this either by connecting to the server via SSH and using a text editor such as nano or vi, or you can create a file named, for instance, "procmail.txt" on your computer, upload the file to your account with an SFTP client the same way you would upload a web page, and then rename the file.

At the top of the file, include the following lines, making sure to change it to match your account's domain name:

PATH=/usr/bin:/usr/local/bin                # Path Variables for the procmail session
MAILDIR=/var/spool/mail/yourdomain.com      # Do not put 'www.' in front of your domain here
LOGFILE=$HOME/procmail.log                  # Keeps a log of email routing
VERBOSE=no                                  # Verbose Error Reporting --values (no|off yes|on)
COMSAT=no                                   # set to no|off
# SENDMAIL=/usr/bin/sendmail                # sendmail location (comment in procmail only)

The Procmail rules, sometimes called "recipes," will come after that.

Email Forwarding

Here is a simple email forwarding rule:

:0
* ^TO_somethinglocal@myHurricaneElectricHostedDomain.com
! my_personal_address@someOtherDomain.net

Note: this forwards all mail, including spam. Please install SpamAssassin at the top of your .procmailrc file to limit the amount of spam your destination mailbox receives.

Sorting into Folders

Adding the following text will match everything with 'INFO REQUEST' in the Subject line and save it to the folder 'Marketing'.

:0
* ^Subject:.*INFO REQUEST
Marketing

Custom Autoresponders

Adding the text below will match everything with 'SUPPORT' in the Subject line and return an acknowledgement to the user who sent the support request.

This is a little more difficult to understand. Make sure that 'SUPPORT' is in the Subject line and that it does not contain data from 'FROM_DAEMON' (listserv's and auto-mailers are suppose to put this in their headers.)

We also don't want to keep replying to other auto responders. This is remedied by putting an 'X' header on your response. (X headers are not seen by standard mail clients) formail reformats the headers of the outgoing message to include 'X-Loop: john_doe@bigbusiness.com' The text that is being displayed is in the file '/home/your_account/acknowledgement.txt' It's mailed to support@bigbusiness.com and saved to the 'Support' folder.

:0
* ^Subject:.*SUPPORT
* !^FROM_DAEMON
* !^X-Loop: john_doe@bigbusiness.com
  {
   :0 h c
     | (formail -t -r -A"X-Loop: john_doe@bigbusines.com " ; \
     cat /home/your_account/acknowlegement.txt ) | $SENDMAIL -t
  }

Examples of Combining Rules

Adding the following text will match everything with 'ORDER' in the subject line and save it to the folder Sales' and then send it to joe@bigbusiness.com.

:0
* ^Subject:.*ORDER
{  
  :0 c
  ! joe@bigbusiness.com
  :0
  Sales
}

To separate mail by sender (From line) use the following text, which will cause any mail from joe@bigbusiness.com to be stored in the folder 'BigBoss'.

:0
* ^From:.*joe@bigbusiness.com
BigBoss

The following text will cause any mail sent to register@yourvirtualhost.com to be stored in the folder 'Registrations'. This can be handy if the mail being sent to register@yourvirtualhost.com is actually being forwarded to another address, because the email's entire history is preserved, and Procmail will know who the original recipient was supposed to be.

:0
* ^TO_register@yourvirtualhost.com
Registrations

Here's a modification of the autoresponder used above: mail sent support@yourvirtualhost.com triggers an autoresponse, is saved to a folder ("Support"), and a copy is forwarded (to support@bigbusiness.com).

:0
* ^TO_support@yourvirtualhost.com
* !^FROM_DAEMON
* !^X-Loop: john_doe@bigbusiness.com
  {
   :0 h c
     | (formail -t -r -A"X-Loop: john_doe@bigbusines.com " ; \
     cat /home/your_account/acknowlegement.txt ) | $SENDMAIL -t
   :0 c
     !support@bigbusiness.com
   :0
     Support
  }