MIMEDefang Notes

Content-Disposition

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.

Content-Disposition

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*
    .3047913f36e9230ffca5c33ea2cf35feec8a2969.png
    3047913f36e9230ffca5c33ea2cf35feec8a2969.png
    $ cat .304*
    Crypto.1600x1200.png

  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
    <Limit GET POST OPTIONS PROPFIND>
    Order Allow,Deny
    Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
    Order Deny,Allow
    Deny from all
    </LimitExcept>
    </Directory>

    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(
    $entity,
    "/var/tmp/defang",
    "http://sial.org/foo",
    ($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.