Sebastian Krysmanski: Mails mit Perl verschicken.

1. Ich habe mir zwar den Text zum Thema "Verschicken von Emails mit Perl" durchgelesen, aber bei mir funktioniert das nicht. Die Nachricht kommt bei mir nicht an, obwohl ich das Beispiel so kopiert habe, wie es da stand. Der Server meldet auch keinen Fehlen. Wer kann mir helfen? Das Script sieht folgendermaßen aus:

#!/usr/bin/perl

if($ENV{'REQUEST_METHOD'} eq 'GET')
{
  $Daten = $ENV{'QUERY_STRING'};
}
else
{
  read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
}

$i=0;
@namen = ("");
@Formular = ("");

@Formularfelder = split(/&/, $Daten);
foreach $Feld (@Formularfelder)  
{
  ($name, $value) = split(/=/, $Feld);  
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/<!--(.\n)*-->//g;      
  $namen[$i] = $name;  
  $Formular[$i] = $value;  
  $i = $i + 1;
}

if (@namen[0] eq "mailto" && @namen[1] eq "subject" && @namen[2] eq "mailfrom" && @namen[3] eq "meldung")
{

$Mailprogramm = "/usr/sbin/sendmail";  # Pfad des Mailprogrammes

$MailSubject = "Testmail";
     $Empfaenger = "lordb@online.de";
      $SenderName = "LordB";
$SenderMail = "lordb@online.de";

open(MAIL,"$Mailprogramm -t") &mailer;

print MAIL "To: $Empfaenger\n";
print MAIL "From: $SenderMail $SenderName\n";
print MAIL "Subject: $MailSubject\n\n";

print MAIL "LordB FormMailer\n";
print MAIL "-----------------------------------------------------------\n\n";

$max = $i;
for($i=4;$i<=$max;$i++)
{
print MAIL "$namen[$i] :        $Formular[$i]\n";
}
close(MAIL);

print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Danke</TITLE></HEAD>\n";
print "<BODY BGCOLOR=#FFFFFF leftmargin=0 topmargin=170>\n";
print "<layer left=0 top=49% width=100%><FONT SIZE=6><CENTER>\n";
print "To: $Empfaenger \n";
print "From: $SenderName \n";
print "Subject: $MailSubject \n\n";

print @Formular[3],"<p>\n";
print "<A HREF="javascript:history.back()"> Zurück </A>\n";
print "</CENTER></FONT></LAYER></BODY></HTML>\n";
}
else
{
   print "Bitte überprüfen sie die Namen der ersten 4 Formularfelder\n";
   goto ende;
}

sub mailer
{
print "Mailprogramm konnte nicht ausgeführt werden. Bitte melden ...\n";
goto ende;
}

ende:

2. Ich habe nur den Mailteil in mein Script genommen, bekomme aber nur eine Fehlermeldung. Wenn ich das Script aber offline teste, bekomme ich nur den Fehler, dass der Interpreter das Mailprogramm nicht finden konnt. Was soll ich tun? Hier für ist der CODE:

#!/usr/bin/perl

@Formular = ("test1","test2","name","sebastian");

$Mailprogramm = "/usr/sbin/sendmail";
$MailSubject = "Formluar-Feedback";   # siehe Erläuterung unten
$Empfaenger = "lordb@online.de"; # siehe Erläuterung unten
$SenderName = "LordB";           # siehe Erläuterung unten
$SenderMail = "lordb@bigfoot.de";           # siehe Erläuterung unten

print $SenderMail;

open(MAIL,"$Mailprogramm -t") die;
print MAIL "To: $Empfaenger\n";
print MAIL "From: $SenderMail $SenderName\n";
print MAIL "Subject: $MailSubject\n\n";

$i = 0;
$max = $#Formular;
for($i=0;$i<=$max;$i=$i+2)
{
print MAIL "$Formular[$i]: $Formular[$i+1]\n";
}
close(MAIL);

print "Fertig";

Der Pfad für das Mailprogramm ist aber richtig.

WER KANN MIR HELFEN? Ich weiss, dass man sich erst reinfinden muss, aber ich würde mich auf eine Antwort freuen!

  1. Hi,

    Dein Problem hat vermutlich gar nichts mit der Anwendung zu tun. Du begehst einen klassischen ('tschuldigung) Anfängerfehler! Nämlich:

    #!/usr/bin/perl

    [...]

    print $SenderMail;

    500 Internal Server Error.

    Weißt Du, warum? Ganz einfach: Der Content-type fehlt ;-)
    Setz den mal rein und probier es noch mal. Ansonsten teste es per Telnet mal mit "perl -c script.pl"

    Cheatah

  2. Hallo Sebastian,

    das Problem liegt wohl hier:

    for($i=4;$i<=$max;$i++)
    {

    »»  print MAIL "$namen[$i] :        $Formular[$i]\n";

    }

    Bei mir werden mails nicht versendet, wenn im Mailtext ein Doppelpunkt vorkommt. Nimm Ihn mal hier raus. Ich nehme an es liegt an folgendem:

    To: wird als Empfänger interpretiert
    From: als Sender
    Subject: als Betreff
    etc...

    Vieleicht versucht das Mailprogramm dann die Anweisung
      Sebastian:
    auch zu interpretieren....

    Ich habe einfach ohne Doppelpunkte (ausser bei to, from, etc..) gearbeitet, und es ging!

    Gruß

    Christian Schnagl

    1. Hi,

      Bei mir werden mails nicht versendet, wenn im Mailtext ein Doppelpunkt vorkommt. Nimm Ihn mal hier raus. Ich nehme an es liegt an folgendem:

      To: wird als Empfänger interpretiert
      From: als Sender
      Subject: als Betreff
      etc...

      Vieleicht versucht das Mailprogramm dann die Anweisung
        Sebastian:
      auch zu interpretieren....

      das glaube ich eigentlich nicht, weil zwischendrin der Header mit "\n\n" beendet wurde. Der Rest wird als Body der Message interpretiert.

      Cheatah