Mail mit Attachment versenden
Mime::Lite ist wohl die bequemste Möglichkeit, um aus Perl-Scripts heraus einigermaßen ordentlich MIME-codierte Mails mit Anhang zu versenden.
#!/usr/bin/perl -w
use strict;
use diagnostics;
use MIME::Lite;
use File::Basename;
my $absender = 'Alice <alice@thisdomain.invalid>';
my $empfaenger = 'Bob <bob@otherdomain.invalid>';
my $datei = "/home/alice/info.pdf";
my $smtphost = "127.0.0.1";
my $smtpport = 25;
my $betreff = "Demo Dateianhang";
my $anschreiben = <<EOF;
Sehr geehrte Damen und Herren,
anbei die gewünschten Informationen.
EOF
# Alternative Aufrufe, siehe unten.
MIME::Lite->send('smtp', $smtphost, Port=>$smtpport, Timeout=>5);
my $msg = MIME::Lite->new(
From => $absender,
To => $empfaenger,
Subject => $betreff,
Type => 'multipart/mixed'
);
$msg->attach(
Type => 'text/plain; charset=UTF8',
Data => $anschreiben
);
$msg->attach(
Type => 'AUTO',
Path => $datei,
Filename => basename($datei),
Disposition => 'attachment'
);
# Leider habe ich immer wieder Probleme, den Rückgabewert
# abzufangen; eval funktioniert einigermaßen.
my $rc;
eval{ $rc = $msg->send(); };
no warnings;
if (0 == $rc){
die "Mailing failed!\n";
}
Um eine Mail direkt über den lokalen MTA z.B. per sendmail oder qmail-inject einzuqueuen, würde man MIME::Lite wie folgt konfigurieren:
MIME::Lite->send('sendmail', "/usr/sbin/sendmail -t -oi "); ### (Postfix)
Bzw.
MIME::Lite->send('sendmail', "/var/qmail/bin/qmail-inject -f $absender $emfpaenger"); ### (Qmail)