Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
smtp.pl
#!/usr/local/bin/perl -w
# smtp.pl -- Sendet Mails mit Net::SMTP. Ein kleiner Wrapper.
use Net::SMTP; # CPAN-Modul aus der libnet.
# >>>>>> Die folgenden Konstanten muessen Sie anpassen! <<<<<<
use constant XMAILER => 'Net::SMTP / PerlOS'; # UA-String.
use constant TIMEOUT => 30; # Timeout.
use constant MAILHOST => 'mail.somewhere.org:smtp'; # SMTP-Server.
use constant MAILDOMAIN => 'somewhere.org'; # Domain.
use constant MAILFROM => 'someone@somewhere.org'; # From:
use constant MAILBACK => 'myaccount@hidden.com'; # ReplyTo:
# >>>>>> Die obigen Konstanten muessen angepasst werden! <<<<<<
# Eine typische Mailstruktur mit der zu verwendenden Mail.
$mailp = {
Mailhost => MAILHOST, # Ueber welchen Mailserver?
Maildomain => MAILDOMAIN, # HELO/EHLO Maildomain
Timeout => TIMEOUT, # Wartezeit, bis Server da ist.
Mailer => XMAILER, # Name des UAs
From => MAILFROM, # Wer sendet die Mail?
ReplyTo => MAILBACK, # Wohin soll die Antwort?
To => [ shift(@ARGV) ], # Liste der Empfaenger: Hier nur 1.
Subject => join(' ', @ARGV), # Subject auf der Kdo-Zeile.
Sigfile => $ENV{'HOME'} . "/.signature", # Anschrift, Telnr, ...
Data => [ contents() ], # Einzelne Zeilen ohne \n.
};
send_mail($mailp); # Ab geht's!
sub send_mail {
my $mailp = shift;
# Sanity-Checks: Sind alle Werte plausibel?
return unless $mailp->{'From'}; # Keine anonymen Sender!
return unless $mailp->{'To'}->[0]; # Mindestens ein Empfaenger!
$mailp->{'Maildomain'} ||= MAILDOMAIN; # Auch die brauchen wir.
$mailp->{'Timeout'} ||= TIMEOUT; # Und das noch.
$mailp->{'Subject'} = "(no subject)" unless $mailp->{'Subject'};
# Bereiten wir schon einmal einiges vor.
my $rcpt = join(',', @{ $mailp->{'To'} });
my $replyto = $mailp->{'ReplyTo'} || $mailp->{'From'};
my $xmailer = $mailp->{'Mailer'} || XMAILER;
my $signature = get_signature_from_file($mailp->{'Sigfile'});
# Nun koennen wir Mail senden.
my $smtp = Net::SMTP->new($mailp->{'Mailhost'},
Hello => $mailp->{'Maildomain'},
Timeout => $mailp->{'Timeout'})
or return;
# SMTP-Envelope (Das ist NICHT der Header!)
$smtp->mail($mailp->{'From'}) or return;
$smtp->to(@{ $mailp->{'To'} }) or return;
$smtp->data() or return; # Anfang der E-Mail.
$smtp->datasend(<<"EOHEADER") or return; # E-Mail-Header.
From: $mailp->{'From'}
To: $rcpt
Reply-to: $replyto
X-Mailer: $xmailer
Subject: $mailp->{'Subject'}
EOHEADER
$smtp->datasend("\n") or return; # Ende des E-Mail-Headers,
# Anfang des E-Mail-Body.
$smtp->datasend(join("\n", @{ $mailp->{'Data'} })) or return;
$smtp->datasend("\n\n" . "-- \n") or return;
$smtp->datasend($signature) or return;
$smtp->dataend() or return;
$smtp->quit() or return;
print "mail sent.\n";
}
sub contents {
my @body;
print "Please enter mail body:\n";
while (<STDIN>) {
chomp;
return @body if /^\.$/;
push(@body, $_);
}
return @body;
}
sub get_signature_from_file {
my $fname = shift; # Dateiname der Signatur.
local $/ = ''; # Schluerfmodus
open (SIGFILE, $fname) or die "can't open sigfile $fname: $!\n";
my $sig = <SIGFILE>; # Alles auf einmal laden.
close (SIGFILE);
return $sig;
}
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:56:05 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|