MAIL00001 - Perl: E-Mails per ActivePerl versenden
Die Nutzung eines 'sendmail'-ähnlichen Befehls unter Windows unterscheidet sich ein wenig von der Sendmail-Portierung unter Linux, denn Windows kennt keinen eigenen ‚sendmail'-Befehl.
Im Folgenden finden Sie eine Anleitung, wie man die aus Unix und Linux bekannte sendmail-Funktion unter Windows in Ihrer Funktionsweise replizieren kann (auch abrufbar unter http://aspn.activestate.com/ASPN/docs/ActivePerl/faq/Windows/ActivePerl-Winfaq4.html; allerdings nur in englischer Sprache):
Wie verschicke ich E-Mail per ActivePerl?
Im Laufe der Zeit wird man als Webadministrator Skripten begegnen, die E-Mail mit externen Mailprogrammen verschicken, z.B.:
open(MAIL, '| /usr/lib/sendmail user@there.com') or "die"; print MAIL < To: user@there.com From: user@here.com Hello, World! EOF
Diese Art von Skript führt bei den Autoren von Websites häufig zu der Frage, ob es ein Windows-Äquivalent zum ‚sendmail'-Befehl auch unter dem Microsoft-Betriebssystem gibt - die Antwort lautet: ja, aber keine, die in Windows integriert ist. Dafür brauchen Sie also Perl.
Wenn Sie E-Mail aus einem Perl-Skrips heraus verschicken möchten, benötigen sie kein externes Programm wie etwa ‚sendmail' - das libnet-Bundle enthält Net::SMTP - ein Modul, welches zum Mailversand benutzt werden kann.
Hier ein Beispiel:
use Net::SMTP;
$smtp = Net::SMTP->new('here.com'); # Verbindung mit einem SMTP-Server
$smtp->mail( 'user@here.com' ); # Setzen Sie hier die Adresse des Absenders ein
$smtp->to('user@there.com'); # Empfängeradresse
$smtp->data(); # Beginn des Mailvorgangs
# Sende den Header.
$smtp->datasend("To: datasend("From'>user@there.com\n>user@there.com\n"");$smtp->datasend("From'>user@there.com\n");
$smtp->datasend("From: user@here.com\n");
$smtp->datasend("\n"); # Sende den Textkörper.
$smtp->datasend("Hello, World!\n");
$smtp->dataend(); # Endes des Mailvorgangs
$smtp->quit; # schließt die SMTP-Verbindung
Eine weitere Alternative wäre ‚Mail::Sender', welche folgendermaßen verwendet wird:
use Mail::Sender;
$sender = new Mail::Sender {smtp => 'mail.yourdomain.com', from => 'your@address.com'};
$sender->MailFile({to => 'some@address.com', subject => 'Here is the file',
msg => "I'm sending you the list you wanted.",
file => 'filename.txt'});
Die dritte Möglichkeit wäre ‚Mail::Sendmail', welches so eingebunden werden muss:
<code>use Mail::Sendmail;
%mail = ( To => 'you@there.com',
From => 'me@here.com',
Message => "This is a minimalistic message"
);
if (sendmail %mail) { print "Mail sent OK.\n" }
else { print "Error sending mail: $Mail::Sendmail::error \n" }</code>
