stephan-hein.de - Technik - Perl Mime::Lite

HowTo

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);