Email mit Attachment versenden mittels Perl Mime::Lite
Problemstellung
Sie wollen Emails mit Attachment im Batch-Betrieb versenden. Umlaute sollen korrekt dargestellt werden.
Perl Mime::Lite
Das CPAN Modul Perl::Lite bietet hier einen unkomplizierten Lösungsansatz. Zusätzlich muss mittels Module Encode sichergestellt werden, dass Umlaute (und andere Sonderzeichen) in der Betreffzeile und im Text korrekt sind.
Erforderliche CPAN Module
Folgende CPAN Module müssen installiert sein:
MIME::Lite
MIME::Types
Email::Date::Format
Programm
Nach der Installation müssen die Module im Programm entsprechend deklariert werden. Das Modul Encode ist für die korrekte Kodierung der Umlaute erforderlich.
use strict;
use MIME::Lite;
use Encode;
Betreff-Zeile dekodieren
In diesem Schritt wird die Betreffzeile statisch gesetzt und
anschließend in das Perl-interne Format umgewandelt.
ACHTUNG: Die Umwandlung setzt voraus, daß die Perl Quelldatei in UTF-8
abgespeichert ist. Dies dürfte mittlerweile auf den meisten PC bzw. Intel-Plattformen
der Fall sein.
my $subject = 'über mich";
$subject = decode('utf8', $subject);
Mime Objekte erstellen
Im nächsten Schritt wird das Mime::Lite Objekt erstellt.
Hierbei ist zu beachten, dass die Betreffzeile wiederum in das MIME-Header-Format
umgewandelt wird.
Des weiteren wird mit Type festgelegt,
daß es sich bei der Email um eine multipart/mixed
Email handelt, bestehend aus den Teilen Text und Attachment.
my $subject = 'über mich";
$sender = 'meine@domain.de';
$receiver = 'empfaenger@domain.de;
# Erstelle multipart message:
my $msg = MIME::Lite->new(
From => $sender,
To => $receiver,
Cc => $sender,
Subject => encode('MIME-Header', $subject),
Type => 'multipart/mixed'
);
Email Text-Part erstellen
my $email_text = 'Der Email Text über diverses';
my $msg_part = MIME::Lite->new(
Type => 'TEXT',
Data => "$email_text"
);
# wg. Umlaute muss hier umgewandelt werden
$msg_part->attr('content-type.charset' => 'UTF-8');
$msg->attach($msg_part);
Email Attachment-Part erstellen
$msg->attach(
Type => 'application/zip',
Encoding => 'base64',
Path => '/tmp/attachment.zip',
Filename => 'attachment.zip',
Disposition => 'attachment'
);
Email senden
my $smtp_host = 'my.smtp.host';
my $user = 'my_user';
my $pwd = 'my_pwd';
$msg->send('smtp',$smtp_host, AuthUser=>$user, AuthPass=>$pwd);