Thread EMails empfangen und weiterverarbeiten
(15 answers)
Opened by Gustl at 2013-05-06 13:43
Danke, werde ich in Zukunft beherzigen.
Folgende Testskripte habe ich erstellt: mail_server.pl: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #!/usr/bin/perl use warnings; use strict; use IO::Socket::INET; use Net::Server::Mail::SMTP; #our $host = $ARGV[0] || "157.163.168.131" ; $| = 1; my @local_domains = qw(example.com example.org); my $server = IO::Socket::INET->new(Listen => 1, LocalPort => 25); print "Waiting for incoming SMTP connections\n"; my $conn; while($conn = $server->accept) { my $smtp = Net::Server::Mail::SMTP->new(socket => $conn); $smtp->set_callback(RCPT => \&validate_recipient); $smtp->set_callback(DATA => \&queue_message); $smtp->process() or die $!; $conn->close(); } sub validate_recipient { my($session, $recipient) = @_; my $domain; if($recipient =~ /@(.*)>\s*$/) { $domain = $1; } if(not defined $domain) { return(0, 513, 'Syntax error.'); } elsif(not(grep $domain eq $_, @local_domains)) { return(0, 554, "$recipient: Recipient address rejected: Relay access denied"); } return(1); } sub queue_message { my($session, $data) = @_; my $sender = $session->get_sender(); my @recipients = $session->get_recipients(); return(0, 554, 'Error: no valid recipients') unless(@recipients); my $msgid = add_queue($sender, \@recipients, $data) or return(0); return(1, 250, "message queued $msgid"); } und sendmail.pl: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #!/usr/bin/perl -w use strict; use MIME::Lite; # EMail verfassen my $mailfrom = 'name@email.de'; my $mailto = 'name@email.de'; my $subject = "TEST_SUBJECT"; my $mailtext ="TEST"; #E-Mail versenden: my $msg = MIME::Lite->new( From => $mailfrom, To => $mailto, Subject => $subject, Type => "multipart/related" ); $msg->attach( Type => "text/html", Data => $mailtext, ); $msg->send("smtp", "157.163.168.131"); #or die ... #mail.dc4ca.siemens.de print "Email von $mailfrom an $mailto gesendet!"; Wenn ich nun mail_server.pl starte hört er ja quasi auf den Port 25. nun Schicke ich die Test emial mit sendmail.pl. Daraufhin kommt eine meldung von perl.exe: perl.exe funktioniert nicht mehr -> Programm schließen. mail_server.pl beendet sich dann ohne Fehlermeldung und bei sendmail.pl: Quote Wenn eine Mail kommt, quasi $server->accept, habe ich ein Problem bei $smtp->process() in mail_server.pl... Wie kann ich das beheben? |