Finally got around to installing SpamAssassin. The installation went smoothly, but I did have a vehement argument with sendmail about the honor of procmail. For those that only touch sendmail at install, here are some tips:

  • chmod 600 .forward. Sendmail doesn’t like to execute world/group writable .forward files.
  • Simplify the .forward file. The following incantation for the .forward file is suggested in the SpamAssassin INSTALL file:

    "|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #user"

    To reduce the number of cargo-cults out there, this line attempts to set an environment variable (the Input Field Separator) to a space and then exec procmail. The argument -f tells procmail to regenerate the leading ‘From’ mail header. The following ‘-’ means that procmail only updates the timestamp on the ‘From’ line. If procmail bombs out, a mysterious exit code 75 is returned. Perhaps sendmail will do something with processes that return 75. In any case, this line ends in a comment that isn’t used by procmail nor sendmail. It’s for you! You don’t need this rather obtuse line. Instead the following will suffice:

    |/usr/bin/procmail

    Now that’s a line even I can understand.
  • Vouch for procmail. When you encounter the following error message sent in an email from postmaster:
    “|/usr/bin/procmail” (reason: service unavailable) (expanded from: jjohn)
    Make sure that the sendmail restricted shell (smrsh) knows that procmail is a trusted program. This is done by putting a symlink to procmail in a directory smrsh knows about. On my RedHat system, that directory is /etc/smrsh. Local conditions may vary.

After my little wrasselin’ match with sendmail, I’m reaping the rewards. SpamAssassin appears to have been worth the effort to install.

What are you waiting for?

[Original use.perl.org post and comments.]