
Mail::Audit::Attach - Mail::Audit plugin for attachment handling.

use Mail::Audit qw(Attach);
my $mail = Mail::Audit->new;
# ...
my $num_attachment = $mail->num_attachments;
my $attachments = $mail->attachments;
remove_attachments(filename => "\.(exe|scr|pif)",
smaller_than => 20000);
$mail->remove_attachments(mime_type => "text/html");
foreach (@$attachments) {
$_->save($attachdir)
if ($_->mime_type =~ |^image/|);
$_->remove
if ($_->filename =~ |\.(vcf)$|);
}
$mail->make_singlepart; # if possible

For the purpose of this plugin, an attachment is a MIME part that has a filename. Files attached to non-MIME messages will not be discovered.

This is a Mail::Audit plugin which provides easy access to files attached to mail messages. Besides Mail::Audit, it requires the MIME::Entity module.
newThis constructor is called by Mail::Audit; it should not be necessary to create a Mail::Audit::Attach object manually.
num_attachmentsReturns the number of attachments found
attachmentsReturns a reference to a list of attachment objects
errorReturns a string with an error message (if an error ocurred).
remove_attachmentsRemoves attachments from the mail that match the criteria specified via the options, or all, if no options are specified. Currently, the following options (hash keys) are supported:
mime_typefile_nameSpecify a regular expression; attachments whose MIME type or filename matches this expression are removed.
smaller_thanbigger_thanSpecify file size limits; attachments smaller or bigger than these limits are removed.
An attachment must match all of the criteria to be removed. Returns the number of attachments removed.
The attachments are a subclass of MIME::Entity. Check out MIME::Entity to learn about useful methods like mime_type or bodyhandle that are inherited.
sizeReturns the size of the attached file.
filenameReturns the original filename given in the MIME headers.
safe_filenameReturns the filename, with /\:;[]| and whitespace replaced by underscores, or 'attachment' if the original filename is empty.
removeRemoves the attachment, ie. detaches the corresponding MIME entity and purges the body data.
save($location)Saves the attachment as a file in $location. If $location is a directory (ie if -d $location), save uses safe_filename to store the file inside that directory, else $location is assumed to be a fully-qualified path with filename.
In both cases, save checks whether the target file exists and appends '.n' to the filename, with n being an integer that leads to a unique filename, if necessary.
Returns the filename used to save the file, or undef if an error ocurred (you might want to take a look at Mail::Audit::Attach::error in that case).
Note that the attachment is not removed.
Mail::Audit::Attach::error will return an error message if an action failed (currently only set by save).

- Fixed POD bug introduced in 0.95
- Upgraded to Makefile.PL in the style of Alexandr Ciornii (v0.21)
- Created GitHub repository
- Fixed RT#19546: Added missing dependency MIME::Base64
- Updated distribution to more modern format.
- Added POD tests.
- Mail::Audit->save died when passed an empty location. Fixed.
location is now optional.
- Now uses File::Spec for more portability
- Introduced Mail::Audit::error (used by save)
- Localized $_ where used
- Now relies on MIME::Head to recognize attachments.
"Never try to be too clever."
- No more warnings.
- Now recognizes attachments with Content-Disposition inline,
but a given filename. This became necessary because Netscape
Communicator and other clients send their attachments that way.
Thanks to Jeff Engelhardt and Vladimir Parkhaev for bringing
this to my attention.
- original version; created by h2xs 1.19

Please report any bugs using the CPAN RT system. The development repository for this module is hosted on GitHub: http://github.com/crenz/Mail-Audit-Attach/.

Christian Renz <crenz@web42.com>

Copyright (C) 2002-2010 Christian Renz <crenz@web42.com>
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
