sendmail funktioniert nicht
Spooky
- perl
Hallo,
gleich zu Beginn sei gesagt, dass ich Perl-Anfänger bin. Ich bin gerade dabei mich einzuarbeiten und einige Scripte laufen auch schon. Nur mit dem "Form-Mailer" von der SELFHTML-Seite hab ich Probleme. Die Mails werden einfach nicht versendet.
Zur Info sei noch gesagt, ich rufe den Form-Mailer von einer anderen Domain aus auf. Aber das sollte doch trotzdem funktionieren!?
Ich arbeite mit "use strict;" und "use CGI::Carp qw(fatalsToBrowser);".
Im Browser erscheint folgende Fehlermeldung:
Software error:
Global symbol "$Sendmail_Prog" requires explicit package name at ordermail.pl line 12.
Global symbol "$mailto" requires explicit package name at ordermail.pl line 14.
BEGIN not safe after errors--compilation aborted at ordermail.pl line 17.
Hier noch der betreffende Quellcode:
$Sendmail_Prog = "/usr/bin/sendmail";
$mailto = "meinname@web.de";
Pfad zu sendmail hab ich überprüft. Hab auch schon im Forum geschaut.
Vielen Dank für die Hilfe!
Tag Spooky.
Ich arbeite mit "use strict;"
Sehr löblich.
Global symbol "$Sendmail_Prog" requires explicit package name at ordermail.pl line 12.
Global symbol "$mailto" requires explicit package name at ordermail.pl line 14.
Es liegt jedenfalls nicht an sendmail, sondern am Einsatz des strict-Pragmas, ohne zu wissen, warum man das tut.
BEGIN not safe after errors--compilation aborted at ordermail.pl line 17.
Diese Meldung resultiert aus den vorher gehenden.
$Sendmail_Prog = "/usr/bin/sendmail";
$mailto = "meinname@web.de";
Lies zusätzlich noch die Erläuterungen zu my. Na, dämmert's :-)
Siechfred
erst mal vielen Dank für die Hinweise. Ich glaub allerdings ich hab da noch ein anderes Problem.
Es liegt jedenfalls nicht an sendmail, sondern am Einsatz des strict-Pragmas, ohne zu wissen, warum man das tut.
Lies zusätzlich noch die Erläuterungen zu my. Na, dämmert's :-)
Ich muss also meine Variablen deklarieren lokal(my) reicht denke ich.
Die Danke-Seite wird zwar geöffnet und habe auch keine Fehlermeldung mehr. Aber mails bekomme ich trotzdem nicht. Der Debugger zeigt auch keine Fehler an. Was kann das nur sein?
use CGI;
my $query = new CGI;
my @names = $query->param;
my $delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
my $returnhtml = $query->param('return'); # ---> URL für Dankeseite
my $subject = $query->param('subject'); # ---> E-Mail-Subject
$subject =~ s/\s/ /g;
my $mailtext = "";
foreach(@names) {
my $name = $_;
my @values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach my $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Location: $returnhtml\n\n";
Die Danke-Seite wird zwar geöffnet und habe auch keine Fehlermeldung mehr. Aber mails bekomme ich trotzdem nicht. Der Debugger zeigt auch keine Fehler an. Was kann das nur sein?
Auf den ersten Blick sehe ich kein Problem, außer, dass weder $Sendmail_Prog noch $mailto definiert sind, was aber vermutlich nur ein C&P-Fehlerchen ist. Was steht denn im Errorlog? Versuche mal, eine E-Mail ohne das ganze Drumherum zu versenden:
my $Sendmail_Prog = "/usr/lib/sendmail";
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: deine_adresse@example.org\n";
print MAIL "Subject: Testmail\n\n";
print MAIL "Dies ist ein Test\n";
close(MAIL);
print "Content-Type: text/plain\n\n";
print "Mail versandt.";
Siechfred
$Sendmail_Prog noch $mailto ist definiert, war nur nicht gepostet. Hatte nur "my" ergänzt.
Hier ist der angezeigte error von Deinem Skript:
The server encountered an internal error and was unable to complete your request.
Error message:
Premature end of script headers: testmail.pl
If you think this is a server error, please contact the webmaster.
Error 500
Rechte hab ich auf 755 gesetzt.
ERROR 500 hat sich erledigt. Hatte die erste Zeile im Skript vergessen - sorry.
Das Skript funktioniert jetzt, eine Mail wird aber nicht versendet.
Das Skript läuft und die Mail wird auch gesendet. Ich hatte den "" vor "web.de" vergessen. Jetzt muss ich nur noch sehen, daß "mein" Skript auch funktioniert.
Vielen vielen Dank erstmal!
Ich habe nun festgestellt, daß das sendmail Verzeichnis nicht /usr/bin/sendmail ist, wie auf der Betreiber-Seite angegeben. sondern /usr/lib/sendmail.
No comment....