Mail mit Attachment versenden

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

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)