[Cologne-pm] Fehler beim Versenden einer E-Mail

Karl-Heinz Kuth khkuth at freenet.de
Wed Dec 14 10:23:43 PST 2005


Hallo,

> Ich weiss das auch nicht auswendig. Ich habe nachgeschaut.
> ZB. listet http://search.cpan.org/dist/Net-SMTP_auth/MANIFEST
> keine .xs-Dateien auf, sondern nur ein .pm, enthält also nur
> Perl-Code.

Ich schaue bei ActiveState nach wegen der ppms, (weil ich ein fauler 
Mensch bin) und da gibt es das nicht für die von mir eingesetzte 
Perlversion. Trotzdem meine allgemeine Frage, wer sagt mir, dass das ein 
beliebiges Modul unter allen unterstützten Perlversionen läuft? Ein 
Perlmodul kann ja auch abhängig von einer bestimmten Perlversion sein.

>>Anyway, warum wird eigentlich immer gesagt mal soll use strict
>>verwenden und in allen Beispielen in der Dokumentation fehlt
>>dieses? Die meisten Beispiele in der Dokumentation sind sowieso
>>nicht lauffähig. Kommen wir nicht ab des Weges.
> 
> Dass in 10-zeiligen Beispielsourcen oben kein `use strict;`
> dransteht, ist wohl nicht weiter verwunderlich.

Sehe ich anders, wenn ich so vehement überall einfordere, dass das 
Konstrukt genutzt werden soll, gehört es auch in einen 10-zeiliges 
Beispielskript, andernfalls ist für mich die Forderung unglaubwürdig.

Hinz kommt, dass es manchmal  verdammt viel Arbeit herauszufinden, wie 
man was definieren muss, damit das Skript mit use strict funktioniert. 
Das habe ich selber schon beim Modul Inifile erlebt. Ich musste 
daraufhin use strict abschalten.

> Dass die Beispiele oft kleine Fehler enthalten und deshalb nicht
> direkt lauffähig sind, ist allerdings ein bekanntes Leid. Sie
> werden halt fast nie debuggt. Es gibt ein paar Möglichkeiten,
> das Testen von Beispielcode einzurichten, aber man muss sich
> darum bemühen, und das tun leider nur wenige.

Mir war es unbekannt. Danke für die Info! Das erklärt so manches.

>>Wieso läuft mein Skript nicht?
> 
> Was heisst »läuft nicht«: kompiliert nicht? Tut nichts? Bricht
> mit Fehlermeldung ab? Computer explodiert?

Computer explodiert :-) - der war gut. Ein nicht kompilierendes Skript 
würde ich in diesem Fall nicht posten. Es schickt keine Mails ab und 
eine Authentifizierung scheint es auch nicht zu machen.

> Ich vermute, es tut einfach nichts gescheites. Die Net::SMTP-Doku
> hat zu ->send() nämlich folgendes zu sagen:
> 
>     This initiates the sending of a message. The method recipient
>     should be called for each address that the message is to be
>     sent to.
> 
> Das tust du erst, nachdem du ->data() aufgerufen hast. Du
> schickst du dem Server also erstmal einen Batzen irgendwelcher
> Daten, die er garnicht erwartet, und bittest ihn erst dann, eine
> Nachricht entgegenzunehmen; und das, ohne ihm jemals zu sagen,
> wem er die Nachricht denn schicken soll.
> 
> Wie soll das funktionieren?

Im Objekt
$mail_object = MIME::Lite->new(
	From     => $header_absender	,
	To       => $mail_to		,
	Cc       => $mail_cc		,
	Bcc	 => $mail_bcc		,
	Subject  => $mail_betreff	,
	Type     => 'Text'		,
	Data     => $mail_text	    	);

definiere ich, wer was wie bekommen soll. Bei Mime::Lite kann ich dann 
einfach sagen, send_by_smtp() und gut ist. Es ist gewährleistet, dass es 
einen Empfänger, Absender, Betreff und Mailtext gibt. Das passiert aber 
in einem Teil, den ich nicht gepostet habe. Ist für die Diskussion eher 
weniger von Belang. Es ist somit m. E. alles für eine "rechtmäßige" 
E-Mail verhanden, warum sollte da der Server pingelig werden und sagen, 
"Nä, ich weiß nicht, wer das bekommen soll?"

Ich möchte auch weiterhin dieses Objekt unbedingt nutzen. Ich füge 
später noch eventuelle Anhänge an das Objekt.

> Der Beispielcode in der Doku zu Net::SMTP und auch zu
> Net::SMTP_auth zeigt das jedenfalls in der richtigen Reihenfolge.

Die Beispiele zu Net::SMPT und Net::SMPT_auth sind auch für den Hintern, 
da wird nämlich auch keine E-Mail mit verschickt.

Und dann das:
mail ( ADDRESS [, OPTIONS] )
send ( ADDRESS )
send_or_mail ( ADDRESS )
send_and_mail ( ADDRESS )

Ich bin überfordert. Ich weiß nicht, wo der Unterschied zwischen den 4 
Methoden ist und welche für was zu nutzen ist. Die Doku ist mir an 
dieser Stelle auch keine Hilfe.

> Ausserdem prüfst du dauernd $@, obwohl du keine eval()s im Code
> hast. Wieso? Die Net::Cmd-Doku, auf die sowohl Net::SMTP_auth
> sowie das dort erwähnte Net::SMTP verweisen, sagt mir auch nichts
> von $@. Hast du da reingesehen?

Ich hatte die "Mailbefehle" mal in ein eval() gepackt und wollte damit 
die Fehlermeldungen erhalten. Ist irgendwie stehengeblieben. Ist so 
natürlich Blödsinn.

In die Net::Cmd Doku habe ich mal reingeguckt, weil man mit der Methode 
message() eine Antworttext des Servers erhällt.

Viele Grüße
Karl-Heinz



More information about the Cologne-pm mailing list