PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mail versenden mit Perl



craano
05-12-2006, 18:50
Hallo,

ich versuche gerade mit einem Perl script einen Mail zu versenden, ich bekomme keine Fehlermeldungen, doch leider kommt keine mail bei mir an.

Zum Verständnis hier ein kurzes script wie ich vorgehe:



#!/usr/bin/perl -w
#
#
#
#

use Net::POP3;
use Net::SMTP;

$user = "USER";
$passwd = "SECRET";
$pop3Server = "mx.PROVIDER.de";

$pop3 = Net::POP3->new($pop3Server, Timeout => 60);

print "Einloggen in $pop3Server als $user ...\n";
$messagenum = $pop3->login($user,$passwd) || die "Konnte nicht in $pop3Server einloggen";
print "Sie haben $messagenum Nachrichten\n\n";

# Betreffszeilen der neuen Emails werden ausgelesen und angezeigt.
# Siehe unten für eine Erläuterung dieses Code-Blocks

for ($i=1;$i<=$messagenum ;$i++) {
$subject = $pop3->top ($i);
foreach $zeile (@$subject) {
if (index($zeile,"Subject:")>=0) {
print "Header of message $i: $zeile\n";
}
}
}

####Immer erst pop3, zur Identifizierung

$mailServer = 'mx.PROVIDER.de'; # Name des SMTP Servers. Angabe einer
# IP Adresse ist auch möglich
$nachricht = 'Testnachricht'; # Der Text der Nachricht
$absender = 'NAME@ADRESSE.de'; # Emailadresse des Absenders.
$betreff = 'Sendetest'; # Betreffszeile der Email
$empfaenger = 'AN@ADRESSE.de'; # Emailadresse des Empfängers


print "Mailserver ist : $mailServer\n"; # Name des SMTP Servers wird auf dem
# Bildschirm ausgegeben

$smtp = Net::SMTP->new($mailServer); # Ein neues SMTP Objekt wird erzeugt.
# Als Parameter wird der Name des SMTP
# Servers verlangt.

$smtp->mail($absender); # Dem SMTP Server wird der Absender
# mitgeteilt.
$smtp->to($empfaenger); # Dem SMTP Server wird der Empfänger
# mitgeteilt.

$smtp->data(); # Dem SMTP Server wird mitgeteilt, daß
# nun der Nachrichtentext folgt.
$smtp->datasend("Subject: $betreff\n"); # Betreffszeile wird zum Server
# geschickt.
$smtp->datasend("To: $empfaenger\n"); # Empfänger Emailadresse wird
# geschickt.
$smtp->datasend("\n"); # Leerzeile wird an Server geschickt

$smtp->datasend($nachricht);

$smtp->dataend(); # Dem Server wird mitgeteilt, daß kein weiterer
# Nachrichtentext folgt.
$smtp->quit; # Beenden der Verbindung mit dem Server



$pop3->quit();

Ausgabe:


kai@craano-desktop:~/PERL/POP3$ ./read_subject.pl
Einloggen in mx.PROVIDER.de als USER ...
Sie haben 1 Nachrichten

Header of message 1: Subject: XXX

Mailserver ist : mx.freenet.de
kai@craano-desktop:~/PERL/POP3$

USER, SECRET, PROVIDER ist alles ok. Habe das hier nur anonymisiert.
Wie man sieht, klappt auch das Abholen der Betreffzeile einer Email auf dem Server.

Aber wies0 funktioniert der Sendeteil denn nicht?

Die Ausgabe ist unverfälscht. Es kommt keinerlei Fehler, aber kommt eben auch keine Email. :mad:


Habe mal versucht dem Fehler auf die Spur zu kommen:


unless($smtp){print $!;}
if($smtp){print "success \n";}

Doch leider auch keine Fehlermeldung, immer nur ein "success".
Also eigentlich müsste es doch laufen.

Grüße.
craano.

reneeb
06-12-2006, 10:42
Mit Net::SMTP kenne ich mich nicht aus, aber vielleicht hilft Dir Mail::Sender weiter.

Z.B. http://wiki.perl-community.de/bin/view/Wissensbasis/MailSender

craano
07-12-2006, 15:16
Das ganze soll auf einem Freenet Server laufen.

Dort ist leider nur use Net::SMTP installiert, also muss ich damit vorlieb nehmen.

Aber mein oben gepostetes script läuft bei mir zu Hause und auf dem Server ohne Fehlermeldung, nur bekomme ich keine mails in mein Postfach.

Was läuft denn da bloß falsch.

Ich bin leider kein SMTP Freak. Ich möchte das script nur nutzen, um Emails aus einer Webseite an mich zu verschicken, ohne Pipapo. nur Text, keine Anhänge etc.

Ich bin am verzweifeln, das kann doch nicht so schwer sein.

Folgende Zeile in meinem script:

print $smtp->help() , "\n";

Brimgt diesem Output:

Commands supported:
AUTH STARTTLS HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP ETRN

Hilft das vielleicht jemanden, um mir meinen Fehler aufzuzeigen?

Grüße.
craano.