MIMEDefang Notes


I use MIMEDefang to munge e-mail passing through my mail servers. The following are notes on how to configure MIMEDefang to perform various checks and alter e-mail as needed.


MIMEDefang's action_replace_with_url() function moves specified attachments onto a webserver. The filename used is based on a digest value of the file contents, and not the original filename. To preserve the original filename, both MIMEDefang and the webserver will need to be modified.

  1. Patch mimedefang.pl.in.
  2. This patch is already included with MIMEDefang 2.34 and above.

    Apply the content-disposition.patch before running ./configure in the MIMEDefang source directory. This patch updates action_replace_with_url() to save the original filename to a dot file named after the digest name in question. For instance, the file Crypto.1600x1200.png would result in two files being written to the webserver area, one with the original filename.

    $ ls .304* 304*
    $ cat .304*

  3. Webserver configuration.
  4. Various methods can be used to have a webserver add the Content-Disposition header in with the custom filename. If the server had mod_perl support, use the AddContentDisposition.pm module to add the data in on the fly. A configuration section for apache would look something like the following.

    Alias /foo/ "/var/tmp/defang/"
    <Directory "/www/defang/">
    PerlTypeHandler Apache::AddContentDisposition
    Options None
    AllowOverride None
    Order Allow,Deny
    Allow from all
    Order Deny,Allow
    Deny from all

    Also ensure the MIMEDefang user has write access to the /var/tmp/defang directory, and that the apache user has read access to files therein. For a non-user access system, the easiest is to set the group to defang and let the apache user read the files under the other category.

    # mkdir -p /var/tmp/defang
    # chown root:defang /var/tmp/defang
    # chmod 1775 /var/tmp/defang

  5. Configure mimedefang-filter.
  6. Code will need to be added to the MIMEDefang filter file that specifies which attachments are to be moved to the website. Be sure to pass the filename to be served by the webserver as the fifth argument. See mimedefang-filter(5) for more information on how to code action_replace_with_url() properly.

    return action_replace_with_url(
    ($fname? "\"$fname\"" : "Attachment").
    " (".humanize($size).") relocated:\n\n_URL_",
    $fname # extra data to save

  7. Cleanup /var/tmp/defang.
  8. Depending on the attachments that get written to the website, they may need to be cleaned up by a periodic script such as tmpwatch or similar.