Das senden von mail über SMTP in Perl
Ich versuche zum senden von E-Mails per SMTP in Perl.
Habe ich ein Skript geschrieben.
#!perl
use warnings;
use strict;
use Net::SMTP;
my $smtpserver = 'server';
my $smtpport = 25;
my $smtpuser = 'username';
my $smtppassword = 'password';
my $smtp = Net::SMTP->new($smtpserver, Port=>$smtpport, Timeout => 10, Debug => 1);
die "Could not connect to server!\n" unless $smtp;
$smtp->auth($smtpuser, $smtppassword);
$smtp->to('[email protected]');
$smtp->data();
$smtp->datasend("To: mymail\@gmail.com\n");
$smtp->quit;
Wenn ich dieses Skript ausführen, wird die Ausgabe wie folgt aus:
Net::SMTP>>> Net::SMTP(2.31)
Net::SMTP>>> Net::Cmd(2.29)
Net::SMTP>>> Exporter(5.65)
Net::SMTP>>> IO::Socket::INET(1.31)
Net::SMTP>>> IO::Socket(1.32)
Net::SMTP>>> IO::Handle(1.31)
Net::SMTP=GLOB(0x273faf0)<<< 220 server GMX Mailservices E
Net::SMTP=GLOB(0x273faf0)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x273faf0)<<< 250-server GMX Mailservices
Net::SMTP=GLOB(0x273faf0)<<< 250-8BITMIME
Net::SMTP=GLOB(0x273faf0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x273faf0)<<< 250-SIZE
Net::SMTP=GLOB(0x273faf0)<<< 250-AUTH=LOGIN PLAIN
Net::SMTP=GLOB(0x273faf0)<<< 250-AUTH LOGIN PLAIN
Net::SMTP=GLOB(0x273faf0)<<< 250 STARTTLS
Net::SMTP=GLOB(0x273faf0)>>> RCPT TO:<mymail@gmail.com>
Net::SMTP=GLOB(0x273faf0)<<< 503 5.5.1 MAIL first {mp-eu001}
Net::SMTP=GLOB(0x273faf0)>>> DATA
Net::SMTP=GLOB(0x273faf0)<<< 503 5.5.1 MAIL first {mp-eu001}
Net::SMTP=GLOB(0x273faf0)>>> To: mymail@gmail.com
Net::SMTP=GLOB(0x273faf0)>>> .
Net::SMTP=GLOB(0x273faf0)<<< 502 5.5.2 Unimplemented {mp-eu001}
Net::SMTP=GLOB(0x273faf0)>>> QUIT
Net::SMTP=GLOB(0x273faf0)<<< 502 5.5.2 Unimplemented {mp-eu001}
Ich habe nicht genug Informationen über Perl-und SMTP, so dass ich konnte nicht verstehen, dieser Fehler.
Wie kann ich dieses Problem lösen?
InformationsquelleAutor Selin | 2012-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zu Beginn eine SMTP-Sitzung (nach der Autorisierung falls erforderlich) mit einem MAIL-Kommando mit Angabe des Absenders E-Mail-Adresse. Das ist, warum die Antworten sagen "erste MAIL" (5xx ist ein Fehler-response). Also:
Aber wenn Sie kein SMTP-Experte, warum nicht eine höhere-Ebene-Modul wie E-Mail::Sender anstelle der low-level -Net::SMTP?
Post eine eigene Frage mit der richtigen Diagnose, vielleicht an SuperUser.
Wie kann ich das senden von HTML-Inhalten anstelle von normalem text?
Email::MIME anstelle von-E-Mail::Simple. Oder versuchen Sie E-Mail::Simple::Markdown. Oder...
Danke, Jetzt bin ich mit folgenden code und seine Funktion my $email = Email::MIME->create_html( header => [=> '[email protected]' => '[email protected]', Thema => 'Test-E-Mail'], body => $html, text_body => $plain_text ); sendmail($email, { transport => $transport }); Aber lassen Sie mich wissen, wie bekomme ich den Antwort-code,die Fehlermeldung zu wissen, ob es Erfolg oder nicht ?
InformationsquelleAutor cjm
Hier ist eine aktualisierte version von cjm - Skript, das funktioniert derzeit mit Google Mail Verwendung von STARTTLS (nicht getestet mit anderen SMTP-Dienste)
Es nutzt E-Mail::Sender::Transport::SMTPS statt E-Mail::Sender::Transport::SMTP
Ihrem Google Mail-Konto haben müssen "Zugriff für weniger sichere apps" erlaubt ("eingeschaltet") - wo "weniger sicher" bedeutet nicht unverschlüsselt, es scheint nur zu bedeuten, nicht die Verwendung von OAuth 2.0
InformationsquelleAutor Michael Johnson
Er beschwert sich über das fehlen einerOhne Blick auf irgendwelche Unterlagen, ich denke, es würde Aussehen wie
MAIL FROM:
SMTP-Befehl.$smtp->from('[email protected]')
Wie @cjm schreibt, müssen Sie$smtp->mail('[email protected]');
Zugegeben, es scheint ein wenig albern zu haben, um einen Benutzer-Namen angeben, nachdem Sie haben nur authentifizierte, aber es macht Sinn, aus einer historischen und rückwärts-Kompatibilität Sicht (STARTTLS ESMTP-spec kann einfach sagen, was Sie tun müssen, um zu authentifizieren, dann den rest der Sitzung passiert, genau wie im regulären SMTP, nachdem die Authentifizierung erfolgt ist). Würde es Sinn machen, für
Net::SMTP
zu Schirmen Sie von diesen Implementierungsdetails, obwohl.InformationsquelleAutor tripleee
Btw - wenn auch ein wenig spät, trotzdem für zukünftige Leser, Wussten Sie eigentlich "recv" - Vorgang die mail?
Gibt es keine Fehler in der Ausgabe beigefügt. Sie haben es ermöglicht, debug (Debug=>1) in den Konstruktor. Diese Meldungen gehen Weg sobald Sie auf 0.
Vorteil bei der Verwendung von SMTP ist, dass es enthalten ist, im Lager zu installieren. Keine Notwendigkeit zum hinzufügen von Modulen.
InformationsquelleAutor RB1987
Leider in den (sehr) späten 2014, Net::SMTP::SSL kann 1 von 1 installation, tests, also gmail (und andere) web-basierte server ist nicht erreichbar. Ohne Installation von meinem eigenen mail-server, die einzige Möglichkeit, die ich finden kann, um E-Mail senden von Perl ist die OLE-Outlook. Outlook verwendet dann seine verbindungen, Dinge geschehen zu machen.
Ich hoffe, jemand kann beweisen, mich falsch.
InformationsquelleAutor Mike
Für E-Mail-Dienste, die Verwendung von STARTTLS, ist es am besten, um die neueren NET::SMTPS-Modul. Versuchen Sie den folgenden code:
InformationsquelleAutor Morey