Thomas Mirke: Mail::Sender // mal geht's - mal nicht

Hallo Fachleute,

zum Versenden von E-Büchern als E-Mail-attachment benutzen wir das Perl-Modul Mail::Sender mit verschiedenen Scripten. Diese Scripte enthalten an der fraglichen Stelle identisch den gleichen Code. Sie werden bei 1und1 gehostet, der smtp-Server ist ebenfalls dort. Die beiden Dateien test.dat und test1.dat befinden sich (mit 1 Byte Länge) im gleichen Verzeichnis wie die Scripte. Der Versand funktioniert im einen Fall auch problemlos, im anderen jedoch nicht, was mir unerklärlich ist. Ich befasse mich mit dem Problem seit Freitag.

Hier erstmal der Quellcode:

###################################
$F{'EMAIL'}="tmirke@ra-micro.de";
$aboliefer="Versand geklappt?";
$files="test.dat,test2.dat";

use Mail::Sender;
$sender = new Mail::Sender
(
 {
  from => 'webshop@ra-micro.net',
  smtp => 'smtp.1und1.com'
 }
);

$sender->MailFile
(
 {
  to => $F{'EMAIL'},
  subject => 'Versand Gesetzesbaende',
  msg => $aboliefer,
    file => $files
   }
);
###############################

Könnte es z.B. für den smtp-Server einen Unterschied geben, ob das Script in der Browser-Adresszeile gestartet wird oder über ein Formular-submit?

Ich habe mit smtp-Servern auch wenig Erfahrung, schon gar nicht bei 1und1. Parallel werde ich den dortigen Support mit dem Problem "quälen" und dann das Ergebnis hier auch mitteilen.

Danke im Voraus,
Thomas

  1. Hier erstmal der Quellcode:

    ###################################
    $F{'EMAIL'}="tmirke@ra-micro.de";
    $aboliefer="Versand geklappt?";
    $files="test.dat,test2.dat";

    Du benutzt keine Warnungen und kein use strict?
    Ohne wirst du nur schwer Fehler finden und hättest hier zumindest schonmal einen gefunden.

    Außerdem vermute ich (ich kenne das Modul nicht), das der Parameter file eine Referenz auf ein Array der Dateinamen erwartet. Aber das musst du aus der Dokumentation des Moduls entnehmen.

    Struppi.

    1. Hallo,

      wollte Euch die Lösung nicht vorenthalten:

      #############
      $/ and $\ If you change the $/ ($RS, $INPUT_RECORD_SEPARATOR) or $\ ($ORS, $OUTPUT_RECORD_SEPARATOR) or $, ($OFS, $OUTPUT_FIELD_SEPARATOR) Mail::Sender may stop working! Keep in mind that those variables are global and therefore they change the behaviour of <> and print everywhere. And since the SMTP is a plain text protocol if you change the notion of lines you can break it.

      If you have to fiddle with $/, $\ or $, do it in the smallest possible block of code and local()ize the change!
      #############

      Es ist doch nichts so hilfreich, wie Dokumentationen genauestens zu lesen.

      (:-)))
      Thomas

      1. wollte Euch die Lösung nicht vorenthalten:

        #############
        $/ and $\ If you change the $/ ($RS, $INPUT_RECORD_SEPARATOR) or $\ ($ORS, $OUTPUT_RECORD_SEPARATOR) or $, ($OFS, $OUTPUT_FIELD_SEPARATOR) Mail::Sender may stop working! Keep in mind that those variables are global and therefore they change the behaviour of <> and print everywhere. And since the SMTP is a plain text protocol if you change the notion of lines you can break it.

        If you have to fiddle with $/, $\ or $, do it in the smallest possible block of code and local()ize the change!
        #############

        aha, trotz allem sollte Perl eine Fehlermeldung ausgeben:

        my %F;

        $F{'EMAIL'}="tmirke@ra-micro.de";

        gibt bei mir (auch ohne use strict und -w):

        In string, @ra now must be written as @ra at test.pl line 6, near "tmirke@ra"
        Global symbol "@ra" requires explicit package name at test.pl line 6.
        Execution of test.pl aborted due to compilation errors.

        Struppi.