Funktioniert einfach nicht
Volker
- perl
Hallo,
seit Wochen versuche ich eine E-mail aus einem Perl-prg zu senden. Leider funktioniert es immer noch nicht. Heute habe ich einfach den Program-Code aus SELFHTML genommen und mit einem einfachen Formular angesprochen. Getestet bei mir zu Hause, keine Fehlermeldung keine Email empfangen. Getestet bei externern Server ( dessen Sendmail Pfad der gleiche ist wie im Program ) funktioniert auch nicht. Ich habe jetzt schon viele Stunden ausprobiert. Wenn jemand die Geduld hat mir meinen Fehler zu erklären, wäre ich sehr, sehr dankbar.
Beste Grüße
Volker
Perl-prg:
if($ENV{'REQUEST_METHOD'} eq 'GET')
{
$Daten = $ENV{'QUERY_STRING'}
}
else
{
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
}
@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;
$Formular[$i] = $name;
$i = $i + 1;
$Formular[$i] = $value;
$i = $i + 1;
}
$Mailprogramm = "/usr/lib/sendmail"; # siehe Erläuterung unten
$MailSubject = "Formluar-Feedback"; # siehe Erläuterung unten
$Empfaenger = "adler40@asamnet.de"; # siehe Erläuterung unten
$SenderName = $Formular[1]; # siehe Erläuterung unten
$SenderMail = $Formular[3]; # siehe Erläuterung unten
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 "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>Danke!</title>\n";
print "</head>\n";
print "<body bgcolor=#FFFFFF text=#000000 link=#009900 vlink=006600 alink=#0000FF>\n";
print "<h1>Danke</h1>\n";
print "Wir freuen uns, daß Sie unser Formular ausgefüllt \n";
print "haben. Hier zur Kontrolle Ihre Angaben:<p>\n";
for($i=0;$i<=$max;$i=$i+2)
{
print "<b>$Formular[$i]:</b> $Formular[$i+1]<br>\n";
}
print "<p><hr noshade size=1><p>";
print "<i>Ihr Name, <a href="mailto:IhrName@Provider.xx">IhrName@Provider.xx</a></i>";
print "</body>\n";
print "</html>\n";
HTML-Seite:
<hr><form method=POST action="/cgi-bin/sendtest.pl">
Vorname: <input name=Firstname size=30><br>
<input type="submit" value="Abschicken">
</form><hr>
Hi,
ich hab mal etwas eingefuegt:
if($ENV{'REQUEST_METHOD'} eq 'GET')
»» {
»» $Daten = $ENV{'QUERY_STRING'}
»» }
else
»» {
»» read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
»» }
@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;
»» $Formular[$i] = $name;
»» $i = $i + 1;
»» $Formular[$i] = $value;
»» $i = $i + 1;
»» }
$Mailprogramm = "/usr/lib/sendmail"; # siehe Erläuterung unten
$MailSubject = "Formluar-Feedback"; # siehe Erläuterung unten
$Empfaenger = "adler40@asamnet.de"; # siehe Erläuterung unten
$SenderName = $Formular[1]; # siehe Erläuterung unten
$SenderMail = $Formular[3]; # siehe Erläuterung unten
if (not (-x $Mailprogramm)) {
print "Content-Type: text/html\n\n";
print "Baebaebae.. Ich darf nicht :) \n";
exit;
}
open(MAIL,"$Mailprogramm -t") die;
..
Ciao,
Wolfgang
if (not (-x $Mailprogramm)) {
print "Content-Type: text/html\n\n";
print "Baebaebae.. Ich darf nicht :) \n";
exit;
}open(MAIL,"$Mailprogramm -t") die;
..
Ciao,
Wolfgang
Tja, ich bin wirklich Anfänger und mein Problem ist bis jetzt immer noch nicht gelöst. Herzlichen Dank für den Rat. Wenn ich diesen Text einfüge kommt, wenn ich das Prg im MS-Dos Modus starte: Unregcognized character \240 at line 35.
Kann mir irgendjemand ein simples funktionierendes PRG in Perl schicken, daß einfach eine Mail sendet mit sendmail im Verzeichnis "/usr/lib/sendmail". Ich denke das wäre das einfachste. Wäre echt nett.
Beste Grüße
Volker
Was wäre an diesem Prg falsch?
#!/usr/bin/perl
$Mailprogramm = "/usr/bin/sendmail";
$MailSubject = "Formluar-Feedback";
$Empfaenger = "adler40@asamnet.de";
print "content-type: text/html \n\n";
if (not(-x $Mailprogramm)){
print "nicht geklappt";
exit;
}
open(MAIL,"$Mailprogramm -t") die;
print MAIL "To: $Empfaenger\n";
print MAIL "From: Mir\n";
print MAIL "Subject: Hallo\n\n";
print MAIL "Beispieltext";
print "alles geklappt";
if($ENV{'REQUEST_METHOD'} eq 'GET')
»» {
$Daten = $ENV{'QUERY_STRING'}
»» }
else
»» {
[weiteren Schrottcode gelöscht]
Du solltest das so besser lassen, sondern besser das CGI-Modul benutzen, etwa so:
use CGI ':standard';
my $formularfeld = param 'formularfeld';
Das letzte formularfeld ersetzt Du gegen den Namen des Feldes, dessen Inhalt Du in $formularfeld speichern möchtest.
Ansonsten siehe: "perldoc CGI"
Peter
Hallo,
if($ENV{'REQUEST_METHOD'} eq 'GET')
»» {
»» $Daten = $ENV{'QUERY_STRING'}
»» }
else
»» {[weiteren Schrottcode gelöscht]
Du solltest das so besser lassen, sondern besser das CGI-Modul benutzen, etwa so:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Finde ich auch,
wenn ich den untrigen "Schrottcode" mit CGI sehe, der
ueberhaupt nichts mit dem Problem von Volker zu tun hat :)
use CGI ':standard';
my $formularfeld = param 'formularfeld';Das letzte formularfeld ersetzt Du gegen den Namen des Feldes, dessen Inhalt Du in $formularfeld speichern möchtest.
In Perl gibt es kein Schrottcode! Erst recht nicht, wenn es jemand gerade lernt.
Ciao,
Wolfgang
In Perl gibt es kein Schrottcode! Erst recht nicht, wenn es jemand gerade lernt.
Das ist natürlich Quatsch. Gerade ein Anfänger macht Fehler und eigentlich sollte froh sein, wenn er darauf hingewiesen wird.
So kann es sie in Zukunft vermeiden.
Peter
In Perl gibt es kein Schrottcode! Erst recht nicht, wenn es jemand gerade lernt.
Das ist natürlich Quatsch. Gerade ein Anfänger macht Fehler und eigentlich sollte froh sein, wenn er darauf hingewiesen wird.
So kann es sie in Zukunft vermeiden.
Du hast aber auf keinen Fehler hingewiesen, sondern einfach einen
gueltigen Programmierstil mit einem anderen verglichen und
dabei deinen Geschmack/Programmierstil dadurch hervorgehoben, das
du anders als Schrott hinstellst.
[ ] Bitte sag, das du kein lehrer bist oder Kurse haelst.
Ciao,
Wolfgang
Du hast aber auf keinen Fehler hingewiesen, sondern einfach einen
gueltigen Programmierstil mit einem anderen verglichen und
dabei deinen Geschmack/Programmierstil dadurch hervorgehoben, das
du anders als Schrott hinstellst.
Dem ist ja eben nicht so, die benutzte Routine funktioniert nicht in allen Fällen.
[ ] Bitte sag, das du kein lehrer bist oder Kurse haelst.
Ich kann dich beruhigen. Ich bin kein Lehrer, auch wenn ich an einer Ausbildungsinstitution arbeite.
Peter