PDA

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



Seiten : [1] 2

craano
16.12.06, 19:08
Hallo,

ich weiß, cross-posts sind nicht gerne gesehen, doch irgendwie ist der thread bei Mrunix eingeschlafen, vielleicht weiß hier ja noch jemand Rat.

http://mrunix.de/forums/showthread.php?t=47942

Ich sehe einfach meinen Fehler nicht. Doch leider kommen keine Emails in meinem Postfach an.

Grüß.
craano.

baumgartner
16.12.06, 19:52
Hast du vielleicht das MIME-Modul zur Verfügung?
http://search.cpan.org/~yves/MIME-Lite-3.01/lib/MIME/Lite.pm

Wird dem Mailserver denn eine Mail übergeben? Was sagt die Logdatei?

tschloss
16.12.06, 20:30
http://www.freenet.de/hilfe/email/authentifizierung/index.html


Bislang haben wir zum E-Mail Versand neben dem neueren Verfahren „ASMTP“ (authenticated simple mail transfer protocol) auch das frühere Verfahren SMTP (simple mail transfer protocol) unterstützt.

Um die Sicherheit des Mailversandes zu erhöhen, haben wir uns entschlossen, nur noch das neuere ASMTP-Verfahren zuzulassen.

Beachten Sie bitte, dass Sie Ihre E-Mail Programme (Outlook Express o.ä.) umgehend dahingehend ändern, dass sie ASMTP unterstützen, sich also für den E-Mail Versand am Server anmelden. Eine Übersicht über die Konfiguration der gängigsten E-Mail Programme finden Sie hier:

Für Outlook Express klicken Sie bitte hier

Für Outlook XP klicken Sie bitte hier

Für Outlook 2000 klicken Sie bitte hier

Für Outlook 98 klicken Sie bitte hier

Sollten Sie kein Microsoft Outlook oder Outlook Express einsetzen finden Sie hier eine Beschreibung zu allen anderen E-Mail Programmen.

Beachten Sie dabei bitte insbesondere den Punkt „Allgemeines zu SMTP mit Authentifikation“

Das wäre eine Erklärung, oder?

craano
16.12.06, 20:49
Hallo,

Ob ich das MIME-Modul zur Verfügung habe muss ich erst prüfen.

Ein Log des Servers kann ich Dir leider nicht geben, da das nicht mein Server ist.
Ich versuche zur Zeit das script von meinem Rechner zu Hause laufen zu lassen und spreche den Server meines Domain Hosters an.

Zu diesem Server kann ich mit per SSH einloggen, ich habe aber nur begrenzte Rechte. Hauptsächlich meine Webseite betreuen und meine Perl bzw PHP scripte einstellen.
Von PHP verstehe ich nicht besonders viel, deshalb möchte ich gerne weiter mit Perl arbeiten. (Außerdem erleichtert Perl mir auch bei meinen täglichen Spielereien das Leben ;) )

Später soll dieses script von meiner Webseite per SSI aufgerufen werden.

Das script läuft bei mir zu Hause und auch auf dem Webserver ohne Probleme und ohne Fehlermeldung durch. Der einzige Fehler, der auftritt ist, dass eben keine Emails in meinem Postfach sind. :confused:

Grüße.
craano.

tschloss
16.12.06, 20:56
Du musst wohl ASMTP machen und kein POP-BEFORE-SMTP.

Vielleicht mit einem "auth". Siehe hier : http://search.cpan.org/~gbarr/libnet-1.19/Net/SMTP.pm

jebe
16.12.06, 21:18
kannst das mal versuchen smtp: (arcor):

use Mail::Sender::Easy qw(email);

sub mail
{

my $subject=shift;
my $text=shift;

email({
'from' => 'email@jochen-baier.de',
'to' => 'email@jochen-baier.de',
'subject' => $subject,
'smtp' => 'mail.arcor.de',
'auth' => 'LOGIN',
'authid' => 'myid',
'authpwd' => 'mypass,
'_text' => $text,}) or die "email() failed: $@";

}


mail ($subject, $text);

craano
16.12.06, 21:26
Das Übungsscript seht jetzt so aus:


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

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

$user = "XXX";
$passwd = "YYY";
$pop3Server = "mx.freenet.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";
#Oder verschluesselt
$messagenum = $pop3->apop($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";
}
}
}

$pop3->quit();

####Immer erst pop3, zur Identifizierung

$mailServer = $pop3Server; # Name des SMTP Servers. Angabe einer
# IP Adresse ist auch möglich
$nachricht = 'Testnachricht'; # Der Text der Nachricht
$absender = 'SENDER'; # Emailadresse des Absenders.
$betreff = 'Sendetestt'; # Betreffszeile der Email
$empfaenger = 'RECEIVER'; # 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.

my $ban = $smtp->banner ();
print "$ban \n";

my $dom = $smtp->domain ();
print "$dom \n";

my $hello = $smtp->hello ($dom);
print "$hello \n";

$smtp->auth('XXX','YYY');

$smtp->mail($absender); # Dem SMTP Server wird der Absender
# mitgeteilt.
#$smtp->send($absender);
#$smtp->send_or_mail ($absender);
#$smtp->send_and_mail($absender);

$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.
unless($smtp){print $!;}
if($smtp){print "success \n";}

$smtp->quit; # Beenden der Verbindung mit dem Server


Output:

Einloggen in mx.freenet.de als XXX ...
Sie haben 2 Nachrichten

Header of message 1: Bla

Header of message 2: Blub

Mailserver ist : mx.freenet.de
mx7.freenet.de ESMTP Exim 4.62 Sat, 16 Dec 2006 22:23:00 +0100

mx7.freenet.de
mx7.freenet.de
success
kai@craano-desktop:~/PERL/POP3$


Leider bringt auch
auth(user,pw);
Keinen Erfolg.

Die POP3 Abfrage funktioniert einwandfrei, das Senden wirft zwar keinen Fehler aus, doch leider auch keine Email.

Güße.
craano.

baumgartner
16.12.06, 22:29
Kannst du denn mit mail/mutt mails versenden auf der Kiste?

EDIT:
Um die Sicherheit des Mailversandes zu erhöhen, haben wir uns entschlossen, nur noch das neuere ASMTP-Verfahren zuzulassen.

craano
16.12.06, 23:02
Es funktioniert ja noch nicht mal von hier aus (bin gerade zu Hause).
Dabei versuche ich ja ganz normal diesen SMTP Server anzusprechen, das müsste doch funktionieren, mit Thunderbird oder einem x-beliebigen Email Programm klappt es ja auch.

mail vorhanden, mutt leider nicht.

tschloss
17.12.06, 06:43
Ich vermute, dass das mit dem Authentifizieren nicht klappt.

Um das herauszubekommen, wäre es hilfreich, zu sehen, was die Prozedur so treibt.
Vielleicht kann man mit dem debug-Flag was erreichen?

$smtp = Net::SMTP->new(
Host => 'mailhost',
Hello => 'my.mail.domain'
Timeout => 30,
Debug => 1,
);
Es gibt in diesem Modul überhaupt noch einige Hinweise auf Varianten.

Oder du spielst das ganze mal per "telnet mx.freenet.de 25" durch.

Oder probierst man eine andere SMTP-Library aus dem cpan.perl.org durch. (Siehe oben)

Oder "spielst" mal mit einem anderen SMTP-Server (es könnte die ja auch egal sein, über welchen Server du zum Absetzen nutzt.

Oder du startest mal einen Sniffer und vergleichst die Kommunikation von Thunderbird mit der von deinem Perl Programm.

Oder versuchst mal mit dem SHell-Befehl
echo "Texttext" | mail -s Test empf@domain.de
aus deiner ssh-Konsole eine Mail loszuwerden (aus Perl kann man auch shell-Kommandos absetzen)

Oder oder

craano
17.12.06, 12:33
Guten Morgen,

Die Authentifizierung scheint zu klappen.

Aber es gibt ein anderes Problem:

Hier mal die Ausgabe des Debug Mode:

Mailserver ist : mx.freenet.de
Net::SMTP>>> Net::SMTP(2.29)
Net::SMTP>>> Net::Cmd(2.26)
Net::SMTP>>> Exporter(5.58)
Net::SMTP>>> IO::Socket::INET(1.29)
Net::SMTP>>> IO::Socket(1.29)
Net::SMTP>>> IO::Handle(1.25)
Net::SMTP=GLOB(0x8313054)<<< 220 mx3.freenet.de ESMTP Exim 4.62 Sun, 17 Dec 2006 12:57:32 +0100
Net::SMTP=GLOB(0x8313054)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x8313054)<<< 250-mx3.freenet.de Hello dslc-082-082-234-109.pools.arcor-ip.net [82.82.234.109]
Net::SMTP=GLOB(0x8313054)<<< 250-SIZE 104857600
Net::SMTP=GLOB(0x8313054)<<< 250-ETRN
Net::SMTP=GLOB(0x8313054)<<< 250-PIPELINING
Net::SMTP=GLOB(0x8313054)<<< 250-AUTH LOGIN PLAIN CRAM-MD5
Net::SMTP=GLOB(0x8313054)<<< 250-STARTTLS
Net::SMTP=GLOB(0x8313054)<<< 250 HELP
Net::SMTP=GLOB(0x8313054)>>> MAIL FROM:<perl@XXX>
Net::SMTP=GLOB(0x8313054)<<< 250 OK
Net::SMTP=GLOB(0x8313054)>>> RCPT TO:<mail@XXX>
Net::SMTP=GLOB(0x8313054)<<< 550 E-Mail blocked, see http://spam.freenet.de
Net::SMTP=GLOB(0x8313054)>>> DATA
Net::SMTP=GLOB(0x8313054)<<< 503 valid RCPT command must precede DATA
Net::SMTP=GLOB(0x8313054)>>> Subject: Sendetestt
Net::SMTP=GLOB(0x8313054)>>> To: mail@XXX
Net::SMTP=GLOB(0x8313054)>>> Testnachricht
Net::SMTP=GLOB(0x8313054)>>> .
Net::SMTP=GLOB(0x8313054)<<< 500 unrecognized command
success
Net::SMTP=GLOB(0x8313054)>>> QUIT
Net::SMTP=GLOB(0x8313054)<<< 554 SMTP synchronization error


Die Email scheint also nicht weiter geleitet zu werden, da der Absender Server unter Spam Verdacht steht, das lese ich zumindest unter der ausgegebenen Webadresse. Ist schon ein bisschen seltsam, da das ja der mx.freenet.de ist.

Mehr Sorgen machen mir die Fehler 500 und 554. Deutet wohl auf das Blacklisting hin. Obwohl 250 ja sagt, dass alles iO ist.

Die Telnet Lösung scheidet aus, da ich keinen telnet Zugang zum Server habe.

Das man Systembefehle aus perl heraus absetzen kann weiß ich. Eine Email mit dem
mailProgramm zu verschicken ist kein Problem. Diese Lösung möchte ich jedoch nicht benutzen, da die Email immer mit dem account des eingeloggten users verschickt wird. Also wenn ich per SSH direkt auf der Konsole bin, dann lautet die Absender Adresse webmaster@XXX.de. Das kann ich auch nicht ändern, da ich mich nur mit einem Benutzer anmelden kann. Ich besitze lediglich mehre Postfächer und eben nur diese eine Domain auf diesem Server.
Weiter weiß ich nicht, unter welchem User der Apache läuft und ob dieser überhaupt die nötigen Rechte verfügt, um das mail Programm aus dem inkludierten perl Scipt aufzurufen.

Thunderbird zu sniffen ist auch eine klasse Idee. Das werde ich als nächstes machen. Ich muss mir aber erst die nötige Software besorgen (ich denke Ethreal tuts) und mich näher damit beschäftigen, denn ich befürchte ich habe nicht das nötige KnowHow, um den ganzen Output richtig zu verstehen.
Aber schließlich läuft es ja mit Thunderbird, da müsste man dann ja auf die richtige Spur kommen.

Auf jeden Fall ein großes Danke für die große Hilfe und Mühe bislang.

Grüße.
craano.

tschloss
17.12.06, 13:54
Eigenartig - wo ist den die Authentifizierung im Debug?
Der Adressat und der Absender, sind die beide bei freenet.de oder woanders??

Was passiert, wenn du dieses Skript auf dem Freenet Server laufen läßt (das ist doch das Ziel oder hab ich das falsch vertsanden)?

Telnet: Du kannst per telnet direkt auf den mx3.freenet.de gehen und die Kommunikation per Konsole nachspielen. Bei TLS wird es dann schwierig, braucht freenet aber vermutlich nicht. Obs was bringt, weiss ich nicht, der Debug ist ja jetzt auch schon viel wert.

Sniffer: Ethereal heisst jetzt wireshark, aber ja, das ist das Tool der Wahl.

craano
17.12.06, 14:42
Die Authentifizierung ist doch da:


Net::SMTP=GLOB(0x8313054)<<< 250-AUTH LOGIN PLAIN CRAM-MD5

Wenn ich das script direkt auf dem Server laufen lasse, schaut mir die nächste Enttäuschung direkt ins Gesicht:


Can't call method "auth" on an undefined value at ./read_subject.pl line 62.
:confused:

So ein ******, :mad: , argh ist doch zum Mäusemelken!
Kann doch wohl nicht wahr sein, mit gültigem account und pswd den SMTP nicht dazu zu bewegen zu können eine Email zu versenden. Jedes Mail Programm kann das, nur mein kleines perl Modul stellt sich da so dreijährig an.

Ja, Empfänger und Absender sind beides Postfächer meiner Domain bei freenet.de.

Ich habe wireshark jetzt installiert, habe aber im Moment keine Zeit, ab und zu muss ich auch ein bisschen arbeiten. Vielleicht heute Abend oder Morgen früh.

Güße.
craano.

Jinto
17.12.06, 21:23
Die Authentifizierung ist doch da:


Net::SMTP=GLOB(0x8313054)<<< 250-AUTH LOGIN PLAIN CRAM-MD5
Nein, dass ist die Meldung des Server, welche Authentifizierungen er Akzeptieren würde.

Dein Script versucht anscheinend keine Authentifizierung.

HTH

craano
17.12.06, 23:16
Habe jetzt noch mal folgenden codeschnipsel probiert:



my @text =('test','text');

$smtp2 = Net::SMTP->new(Host => $mailServer, Debug => 1);
$smtp2->command("AUTH LOGIN");
$smtp2->command($user);
$smtp2->command($passwd);
$smtp2->mail($absender);
$smtp2->recipient($empfaenger);
$smtp2->data();
$smtp2->datasend("To: $empfaenger\n");
$smtp2->datasend("From: $absender\n");
$smtp2->datasend("Subject: testsub");
$smtp2->datasend("@text");
$smtp2->datasend("\n");
$smtp2->dataend();
$smtp2->quit();

Mit dieser Ausgabe:


Net::SMTP=GLOB(0x81f1b20)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x81f1b20)<<< 250-mx6.freenet.de Hello dslc-082-082-235-208.pools.arcor-ip.net [82.82.235.208]
Net::SMTP=GLOB(0x81f1b20)<<< 250-SIZE 104857600
Net::SMTP=GLOB(0x81f1b20)<<< 250-ETRN
Net::SMTP=GLOB(0x81f1b20)<<< 250-PIPELINING
Net::SMTP=GLOB(0x81f1b20)<<< 250-AUTH LOGIN PLAIN CRAM-MD5
Net::SMTP=GLOB(0x81f1b20)<<< 250-STARTTLS
Net::SMTP=GLOB(0x81f1b20)<<< 250 HELP
Net::SMTP=GLOB(0x81f1b20)>>> AUTH LOGIN
Net::SMTP=GLOB(0x81f1b20)>>> USER
Net::SMTP=GLOB(0x81f1b20)>>> PASSWD
Net::SMTP=GLOB(0x81f1b20)>>> MAIL FROM:<perl@xxx.de>
Net::SMTP=GLOB(0x81f1b20)<<< 334 VXNlcm5hbWU6
Net::SMTP=GLOB(0x81f1b20)>>> RCPT TO:<mail@xxxh.de>
Net::SMTP=GLOB(0x81f1b20)<<< 501 Invalid base64 data
Net::SMTP=GLOB(0x81f1b20)>>> Subject: testsub
Net::SMTP=GLOB(0x831b190)>>> test text
Net::SMTP=GLOB(0x81f1b20)>>> .
Net::SMTP=GLOB(0x81f1b20)<<< 554 SMTP synchronization error
Net::SMTP=GLOB(0x81f1b20)>>> DATA
Net::SMTP: Unexpected EOF on command channel at ./read_subject.pl line 123


YUHU! Ein erster kleiner Erfolg!

Die Authentifizierung scheint so zu klappen.
Es kommt nur leider immer noch keine Email bei mir an.
Zweites Problem:
Wenn das script auf dem Server direkt läuft, dann produziert es einen Fehler, der Server kennt die command Anweisung nicht!

Can't call method "command" on an undefined value at ./ttt2.pl line 43.


Zwischenzeitlich habe ich auch mit Net::SMTP::TLS experimentiert, dieses Modul hat die Authentifizierung besser implementiert, aber leider ist dieses Paket nicht auf dem Server installiert.

Grüße.
craano.

jebe
18.12.06, 01:23
wenn ein modul nicht installiert ist kannst es auch lokal speichern und mit
"use lib path" benutzen.

tschloss
18.12.06, 07:26
Net::SMTP=GLOB(0x81f1b20)>>> AUTH LOGIN
Net::SMTP=GLOB(0x81f1b20)>>> USER
Net::SMTP=GLOB(0x81f1b20)>>> PASSWD
Net::SMTP=GLOB(0x81f1b20)>>> MAIL FROM:<perl@xxx.de>
Net::SMTP=GLOB(0x81f1b20)<<< 334 VXNlcm5hbWU6
Net::SMTP=GLOB(0x81f1b20)>>> RCPT TO:<mail@xxxh.de>
Net::SMTP=GLOB(0x81f1b20)<<< 501 Invalid base64 data

das sieht nicht so toll aus, finde ich. Das Senden von USER und PASSWD (ich nehme an, du hast die Zeichenketten von Hand ersetzt??) ohne Rückmeldung signalisiert für mich nicht unbedingt Erfolg.

Nochmals: für ein Erfolgserlebnis würde ich es mal mit einem anderen Mailserver versuchen. Vielleicht kannst du diesen dann auch dauerhaft verwenden.
Und/oder andere Perl-Module.

Ich habe auch Perl-Skripte mit Mailversand und hatte mit diesem Aspekt noch nie ein Problem (zB. mit googlemail und Strato, ich meine auch mit Arcor). Ich schaue irgendwann mal nach, womit ich es mache.

craano
18.12.06, 13:01
Hallo,
nun aber wirklich eine Erfolgsmeldung.

Folgender code arbeitet mit dem SMTP Server von Arcor zusammen:


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

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


$smtp = Net::SMTP->new(Host => 'mail.arcor.de', Debug => 1); # Ein neues SMTP Objekt wird erzeugt.

$smtp->auth('USER','PASWD');

$smtp->mail('perl@xxx.de'); # Dem SMTP Server wird der Absender

$smtp->to('mail@xxx.de'); # Dem SMTP Server wird der Empfänger
# mitgeteilt.

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

$smtp->datasend('test text');

$smtp->dataend(); # Dem Server wird mitgeteilt, daß kein weiterer
# Nachrichtentext folgt.
unless($smtp){print $!;}
if($smtp){print "success \n";}

$smtp->quit; # Beenden der Verbindung mit dem Server

Allerdings läuft das script nur von meinem Rechner zu Hause.
Wenn ich das script auf dem Freenet Server laufen lasse, dann bekomme folgende Fehlermeldung:


Can't call method "auth" on an undefined value at ./arcor.pl line 13.

bzw (line 13 zum Testen audkommentiert):

Can't call method "send" on an undefined value at ./arcor.pl line 15.


Wieso ist denn die Freenetkiste so beschnitten? Bislang war ich immer mit dem Service von Freenet sehr zufrieden. Immer erreichbar, nie Datenverlust, aber jetzt so etwas...

Grüße.
craano.

tschloss
18.12.06, 14:33
Ist vielleicht eine alte Version des Skripts ("auth" könnte durchaus in einer älteren Version fehlen). Ggf. kannst du das Modul updaten (ich kenne mich mit CPAN und den Restriktionen auf deinem Webspace zu schlecht aus).

craano
18.12.06, 22:17
Hallo,

Kleines Update,
von meinem Rechner läuft jetzt alles. Zwar über den Server von Arcor, aber das ist ja letztendlich egal.
Die Email selber (Header und Body) erstelle ich jetzt mit MINE::Lite, das bietet mehr Möglichkeiten. Packe die ganze Email dann in einen string und verschicke die Email dann mit NET::smtp.

Nur leider hapert es jetzt immer noch an dem Freenetserver, der die Authentifizierung des NET::smtp leider nicht kennt.


wenn ein modul nicht installiert ist kannst es auch lokal speichern und mit
"use lib path" benutzen.

Könntest Du etwas genauer sein?
Das würde mich brennend interessieren.

Wie kann ich denn Module benutzen, ohne es zu installieren?

Kann ich einfach das entpackte quell Paket des Moduls auf dem Server speichern und dann mit use lib path darauf verweisen?

Grüße.
craano.

jebe
18.12.06, 22:46
Hallo,
Könntest Du etwas genauer sein?
Das würde mich brennend interessieren.

Wie kann ich denn Module benutzen, ohne es zu installieren?

Kann ich einfach das entpackte quell Paket des Moduls auf dem Server speichern und dann mit use lib path darauf verweisen?

Grüße.
craano.

du installierst es am besten erst lokal normal (kann sein das es kompliert werden muss). dann schaust du nach welche datein er angelegt, und kopierst die komplette ordnerstruktur nach zum beisspiel nach "lib". dann hasste da ein verzeichnis drin namens zum beispiel "math" und in diesem verzechnis math.pm etc.

im code verwendest du dann "use lib 'pathtolib'". (ohne math etc)


gruss jebe

craano
19.12.06, 15:44
Hallo,

kleines Update, ich kann den Freenet Server immer noch nicht bewegen mein kleines script auszuführen, da ihm auth und mail unbekannt sind.
Vielleicht ist wirklich eine ältere Version von NET:Smtp installiert. Die Methode mail sollte aber bekannt sein.
Wie kann ich eigentlich herausfinden, welche Version installiert ist.

Ich habe aber einen (eleganten) Workaround gefunden.
Auf dem Server ist sendmail installiert. Also erstelle ich eine Email mit einem kleinen Perlscript mit MIME::Lite. Die mail gebe ich auf der Konsole aus und pipe das an sendmail.


use MIME::Lite;

my $msg = MIME::Lite->new(
From =>'perl@xxx.com',
To =>'mai@xxx.com',
Type =>'TEXT',
Encoding => '7bit',
Subject =>'Mime Type Email',
Data =>"Diese Email wurde mit MIME::Lite erstellt\nmfg KUF \n"
);

my $str = $msg->as_string;
print $str;


create.pl | sendmail -t

Das funktioniert prima, allerdings wurmt mich ein wenig, dass ich das nicht komplett mit Perl hinbekomme. Das kratzt an meinem Ego! :ugly:

jebe
20.12.06, 00:11
was benutzt den sendmail zum verschicken ?(server, methode..) oder wird das als service von deinem server angeboten ?

Jinto
20.12.06, 00:36
sendmail _ist_ der Mailserver bzw. ein Wrapper Skript den andere MTAs aus kompatibilitätsgründen mitliefern.

jebe
20.12.06, 00:52
sendmail _ist_ der Mailserver bzw. ein Wrapper Skript den andere MTAs aus kompatibilitätsgründen mitliefern.

auch wenn ich das als private mensch auf einem private rechner laufen hab ?
sprich brauche ich dann keinen provider mehr der mir einen "email-verschick-server" anbietet ?

tschloss
20.12.06, 06:03
auch wenn ich das als private mensch auf einem private rechner laufen hab ?
sprich brauche ich dann keinen provider mehr der mir einen "email-verschick-server" anbietet ?

Normalerweise liefert man eine Mail bei seinem MTA ab, der sie dann über weitere MTAs zum Ziel-MTA (MX-Record) des Empfängers weiterleitet. Der letzte liefert dann aus.
Theoretisch kannst du auch aus dem Client direkt an den Ziel-MTA ausliefern (manche Massenmailer bieten das als Option an). Oder noch einen (lokalen) MTA vorschalten. Das ist alles ziemlich wahlfrei. Hauptsächlich aus Spam-Gründen ist das an sich offene System heutzutage etwas eingeschränkt (d.h. v.a. das Relaying = übergeben an einen MTA, der es an einen anderen MTA weiterrouten soll).

craano
20.12.06, 14:38
Über die genaue Funktionsweise von sendmail kann ich nichts sagen, ich denke, dass sendmail auch nichts anderes macht, als die Email an den MTA des Providers weiterreicht.

Ich habe aber auch eine Email an den Support von Freenet geschickt und gestern eine Antwort bekommen.


Sehr geehrter Herr xxx,

vielen Dank fuer Ihre E-Mail Anfrage vom 17.12.2006. Sollten nach diesem Schreiben weitere Fragen zum Thema bestehen oder neue Anliegen hinzugekommen sein, geben Sie zukuenftig bitte nachfolgend aufgefuehrte Ticketnummer an. Sie unterstuetzen uns unter Angabe Ihrer persoenlichen Kennung bei der gezielten Problemanalyse und Loesungsfindung.

#freenet#xxx#

Der skripbasierte Mailversand kann nicht unter Angabe des 'mx.freenet.de' erfolgen, da die erforderliche Authentifizierug nicht wie erforderlich erfolgen kann. Es stehen Ihnen zwei Moeglichkeiten zur Verfuegung, der Versand ueber das Standard-CGI

/cgi-std/mail.pl

oder dem Ihnen in Ihrem Profi-Paket zur Verfuegung stehenden Sendmail

/usr/sbin/sendmail

Fuer weitere Fragen stehen wir Ihnen gerne zur Verfuegung,

Wir hätten dann ja lange versuchen können auf den mx.freenet.de zuzugreifen.
Nun denn ich habe ja nun zwei Möglichkeiten meine Emails loszu werden.

Das vorgefertigte script, welches Freenet in der Email angegeben hat, habe ich noch gar nicht entdeckt, das werde ich mir auch noch einmal genauer anschauen.

Ersteinmal danke für die ausdauernde Hilfe.

Noch kurz einen andere Frage, etwas OT, aber möchte ich dafür nicht extra einen neuen Thred eröffnen.
Die mit MIME:Lite erstellten Emails, sind ja wunderbar formatiert. Gibt es bereits ein Perl Modul, welche diese auswertet, wenn ich die Emails von dem POP3 Server hole. So in der Art, dass Betreff, Absender, Nachrichtentext etc in einem Array oder String gespeichert werden?
Vielleicht kennt ja zufällig jemand eins.

Grüße.
craano.

tschloss
21.12.06, 09:02
Über die genaue Funktionsweise von sendmail kann ich nichts sagen, ich denke, dass sendmail auch nichts anderes macht, als die Email an den MTA des Providers weiterreicht.

Ich habe aber auch eine Email an den Support von Freenet geschickt und gestern eine Antwort bekommen.


Sehr geehrter Herr xxx,

vielen Dank fuer Ihre E-Mail Anfrage vom 17.12.2006. Sollten nach diesem Schreiben weitere Fragen zum Thema bestehen oder neue Anliegen hinzugekommen sein, geben Sie zukuenftig bitte nachfolgend aufgefuehrte Ticketnummer an. Sie unterstuetzen uns unter Angabe Ihrer persoenlichen Kennung bei der gezielten Problemanalyse und Loesungsfindung.

#freenet#xxx#

Der skripbasierte Mailversand kann nicht unter Angabe des 'mx.freenet.de' erfolgen, da die erforderliche Authentifizierug nicht wie erforderlich erfolgen kann. Es stehen Ihnen zwei Moeglichkeiten zur Verfuegung, der Versand ueber das Standard-CGI

/cgi-std/mail.pl

oder dem Ihnen in Ihrem Profi-Paket zur Verfuegung stehenden Sendmail

/usr/sbin/sendmail

Fuer weitere Fragen stehen wir Ihnen gerne zur Verfuegung,

Wir hätten dann ja lange versuchen können auf den mx.freenet.de zuzugreifen.
Nun denn ich habe ja nun zwei Möglichkeiten meine Emails loszu werden.

Das vorgefertigte script, welches Freenet in der Email angegeben hat, habe ich noch gar nicht entdeckt, das werde ich mir auch noch einmal genauer anschauen.

Ersteinmal danke für die ausdauernde Hilfe.

Noch kurz einen andere Frage, etwas OT, aber möchte ich dafür nicht extra einen neuen Thred eröffnen.
Die mit MIME:Lite erstellten Emails, sind ja wunderbar formatiert. Gibt es bereits ein Perl Modul, welche diese auswertet, wenn ich die Emails von dem POP3 Server hole. So in der Art, dass Betreff, Absender, Nachrichtentext etc in einem Array oder String gespeichert werden?
Vielleicht kennt ja zufällig jemand eins.

Grüße.
craano.


Da gibt es einiges zu diesem Thema. Viele Module (generell) können auch beides: Strukturen aufbauen und interpretieren.
Gehe mal nach cpan.perl.org und suche nach MIME. Ich suche später mal raus, welches ich für meinen "Anhang-in-Text-Umwandler" verwende [Das Ding holt per POP Mails ab, und wandelt Office-/PDF-Anhänge in Plaintext und appended diesen an den Textkörper der Mail]). Aber Vorsicht, das Themengebiet ist irgendwie sehr variantenreich (besonders wenn man MIME Mails mit Anhängen hat).

Das hier ginge zB vermutlich: http://search.cpan.org/~dskoll/MIME-tools-5.420/lib/MIME/Tools.pm

/EDIT: Ach ja, nochwas: Ich halte es für Quatsch, dass man sich mit einem Skript nicht am Server anmelden können soll. Wenn man einen Client programmieren kann, kann man auch ein Skript erstellen. Letzendlich ist SMTP Kommunikation ja auch basiert auf einfachste Text-Kommandos.

craano
21.12.06, 14:34
Hallo,

die ganzen MIME tools habe ich auch schon entdeckt. Da gibt es wirklich sehr viele. Gut finde ich auch EMAIL::Simple.

Dass das Thema sehr variantenreich ist, habe ich mittlerweile auch gemerkt. Das kommt davon, wenn man sich voller Übermut in ein Thema wirft, wovon man vorher nicht den blassesten Schimmer hat. Aber es fängt an interessant zu werden. Was ich kaum glauben kann ist, dass es auf cpan kein Modul gibt, welches eine MIME Email parst und die Header Infos (also From, To, Cc, Subject etc), sowie die einzelnen Bodyparts, schön sauber in Variablen speichert oder, weil resourcenschonender, Referenzen anlegt. Das wäre eine komfortable Vorgehensweise, um eine MIME Email weiter zu verarbeiten.
Ich finde es ist ein richtiges Gefrickel, um mit den Perl tools, welche ich bisher gefunden habe, eine MIME Email zu parsen und sauber im Browser wieder zu geben. Allein die Trennung der Bodyteile bei multipart Emails ist schwer zu scripten. Dagenen sind die Headerinfos einfach einfach zu bekommen.

Das man automatisch Office Dokumente als plain text anhängen kann, kannte ich noch nicht. Das hört sich aber spannend an, würde mich auch interessieren.

Warum man sich nicht per script an dem STMP Server anmelden kann, habe ich mich auch schon gefragt. Ich kann mir nur vorstellen, das vielleicht der Host (also der Server mit meiner Domain) gesperrt ist. Jedoch funktionierte es von mir zu Hause ja auch nicht. Mit Arcor hingegen war es hingegen kein Problem (allerdings auch nur von mir zu Hause, da ja die auth Methode auf dem Freenet Server nicht verfügbar ist). Ist schon merkwürdig, hast schon recht. :confused:

Mittlerweile denke ich, sofern ich die ganzen Internettseiten, welche ich zu dem Thema gelesen habe, richtig deute, dass sendmail zu benutzen der übliche Weg ist, wenn sendmail auf dem Server zu Verfügung steht und richtig konfiguriert ist.

Dennoch ist das ein Rätsel, welches mich nach wie vor beschäftigt und ich, rein aus Interesse, gerne dem Grund auf die Spur kommen würde.

Grüße.
craano.

tschloss
21.12.06, 15:38
Das man automatisch Office Dokumente als plain text anhängen kann, kannte ich noch nicht. Das hört sich aber spannend an, würde mich auch interessieren.
"Automatisch" läuft es jetzt bei mir. Ich hänge die Anhänge einzeln als Temp-Datei ab und rufe den passenden Konverter auf (doc2text, xls2text, pdf2text - alles eigenständige Progämmchen aus dem Web), bastle die Texte in den Body ein und baue anschließend wieder eine MIME-Mail zusammen.
Der Zweck war eigentlich, bei Googlemail auch in den Anhängen suchen zu können, aber inzwischen ist das obsolet geworden. GMail hat eine eigene, sehr schöne HTML-Darstellung von Office und PDF-Anhängen.





Warum man sich nicht per script an dem STMP Server anmelden kann, habe ich mich auch schon gefragt. Ich kann mir nur vorstellen, das vielleicht der Host (also der Server mit meiner Domain) gesperrt ist. Jedoch funktionierte es von mir zu Hause ja auch nicht. Mit Arcor hingegen war es hingegen kein Problem (allerdings auch nur von mir zu Hause, da ja die auth Methode auf dem Freenet Server nicht verfügbar ist). Ist schon merkwürdig, hast schon recht. :confused:

Da Freenet mit beliebigen Mailclients funktioniert, KANN es im Prinzip auch keine Einschränkung geben, sofern das selbst geschriebene Programm/Skript sich ebenfalls konform verhält. Ich wüßte nicht, wie der Server das unterscheiden sollte.
Wie gesagt, das alles ist ja primitiver Klartextkram, siehe zB hier
http://de.wikipedia.org/wiki/SMTP-Auth
(Das kann man mit Telnet auch alles nachspielen, mit stunnel vermutlich sogar mit TLS)