Problem mit Formmailer

Ich hab ein Problemchen mit einem Formular, welches ich zwar abschicken kann … es kommt aber keine Mail an.

Das Formular sieht so aus:

Rückruf-Service
Wir rufen Sie gerne zurück.
Daten:
Name:

Vorname

Rufnummer

Wann können wir Sie erreichen?

Daten:

Die formmail.pl liegt im richtigen Verzeichnis (sonst würde das Formular wohl auch erst gar nicht verschickt)
… und sieht so aus (Pfad sendmail habe ich beim Hoster nachgefragt):
#!/usr/bin/perl

$mailto = „[email protected]“;
$Sendmail_Prog = „/usr/bin/sendmail“;
use CGI;
$query = new CGI;
@names = $query->param;

interne Daten aus den erwarteten hidden-Feldern auslesen:

$delimiter = $query->param(‚delimiter‘); # —> Begrenzerzeichen
$returnhtml = $query->param(‚return‘); # —> Dankeseite
$subject = $query->param(‚subject‘); # —> E-Mail-Subject

Text der E-Mail aus den Formulardaten ermitteln:

$mailtext = „“;
foreach(@names) {
$name = $_;
@values = „“;
@values = $query->param($name);
if($name ne „mailto“ && $name ne „return“
&& $name ne „subject“ && $name ne „delimiter“) {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}

E-Mail versenden:

open(MAIL,"|$Sendmail_Prog -t") ||
print STDERR „Mailprogramm nicht gestartet werden\n“;
print MAIL „To: $mailto\n“;
print MAIL „Subject: $subject\n\n“;
print MAIL „$mailtext\n“;
close(MAIL);

Dankeseite an Browser senden:

print „Location: $returnhtml\n\n“;

Die Rechte habe ich auf 755 gesetzt.
Wie gesagt, das Formular wird abgeschickt, ich bekomme die Dankeseite … aber es kommt nichts an.

Ist das erste Mal, dass ich sowas ausprobiere … ich kenn mich damit überhaupt noch nicht aus.
Der Debugger sagt mir folgendes:

Possible unintended interpolation of @die in string at /html/cgi-bin/formmail.pl line 3.
Name „main::die“ used only once: possible typo at /html/cgi-bin/formmail.pl line 3.

… womit ich leider gar nichts anfangen kann.
Kann mir da jemand helfen? PHP steht mir leider nicht zur Verfügung, darum habe ich mich für diese Möglichkeit entschieden.

beim naechsten mal am besten zur besseren lesbarkeit pre-tags um deinen
code herumbauen. danke.

$mailto = „[email protected]“;

nunja. stell dir vor, du hast ein array @array und willst es
ausgeben.

print "@array\n";

gibt alle elemente des arrays aus (mit einem leerzeichen zwischen
den elementen).

woher soll perl nun wissen, dass du mit „@die-auftragsgewinnung“ nicth das array
@die meinst?

Possible unintended interpolation of @die in string at
/html/cgi-bin/formmail.pl line 3.
Name „main::die“ used only once: possible typo at
/html/cgi-bin/formmail.pl line 3.

naja, perl sagt dir ja, wo der fehler ist. perl erwaehnt in der
warnung ein array @die.

in perl schreibt man strings mit einfachen anfuehrungszeichen, wenn
man nicht beabsichtigt, variablen darin zu interpolieren.

$mailto = „[email protected]“;

in perl schreibt man strings mit einfachen anfuehrungszeichen,
wenn
man nicht beabsichtigt, variablen darin zu interpolieren.

Anmerkung: du kannst das @ auch Escapen, d.h. ein Bacslash () davor stellen:
$mailto = „[email protected]“;

Gruss
Stefan

Danke Euch beiden schonmal. Leider hab ich beides ausprobiert, ohne Erfolg. Es muss wohl noch wo anders ein Fehler „hängen“.

Ich hab ein Problemchen mit einem Formular, welches ich zwar
abschicken kann … es kommt aber keine Mail an.

Das Formular sieht so aus:

(…)

Die formmail.pl liegt im richtigen Verzeichnis (sonst würde
das Formular wohl auch erst gar nicht verschickt)
… und sieht so aus (Pfad sendmail habe ich beim Hoster
nachgefragt):
#!/usr/bin/perl

$mailto = „[email protected]“;
$Sendmail_Prog = „/usr/bin/sendmail“;
use CGI;
$query = new CGI;
@names = $query->param;

interne Daten aus den erwarteten hidden-Feldern auslesen:

$delimiter = $query->param(‚delimiter‘); # —>
Begrenzerzeichen
$returnhtml = $query->param(‚return‘); # —>
Dankeseite
$subject = $query->param(‚subject‘); # —>
E-Mail-Subject

Text der E-Mail aus den Formulardaten ermitteln:

$mailtext = „“;
foreach(@names) {
$name = $_;
@values = „“;
@values = $query->param($name);
if($name ne „mailto“ && $name ne „return“
&& $name ne „subject“ && $name ne „delimiter“) {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}

E-Mail versenden:

open(MAIL,"|$Sendmail_Prog -t") ||
print STDERR „Mailprogramm nicht gestartet werden\n“;
print MAIL „To: $mailto\n“;
print MAIL „Subject: $subject\n\n“;
print MAIL „$mailtext\n“;
close(MAIL);

Dankeseite an Browser senden:

print „Location: $returnhtml\n\n“;

Die Rechte habe ich auf 755 gesetzt.
Wie gesagt, das Formular wird abgeschickt, ich bekomme die
Dankeseite … aber es kommt nichts an.

Ist das erste Mal, dass ich sowas ausprobiere … ich kenn
mich damit überhaupt noch nicht aus.
Der Debugger sagt mir folgendes:

Possible unintended interpolation of @die in string at
/html/cgi-bin/formmail.pl line 3.
Name „main::die“ used only once: possible typo at
/html/cgi-bin/formmail.pl line 3.

… womit ich leider gar nichts anfangen kann.
Kann mir da jemand helfen? PHP steht mir leider nicht zur
Verfügung, darum habe ich mich für diese Möglichkeit
entschieden.

Hi,

vorab: Ich bin kein „Script-Profi“. Meine Vorschläge:

  • Versuche mal andere Mailformulare aus dem Net, ob die was raussenden.
  • Ist der Pfad zu sendmail richtig? Deine Hoster-Info ist falsch!

(…) (Pfad sendmail habe ich beim Hoster
nachgefragt): #!/usr/bin/perl

Das ist der Pfad zu Perl, aber nicht zu sendmail.

$Sendmail_Prog = „/usr/bin/sendmail“;

Das hier ist der Pfad zu sendmail!
Könnte auch „/usr/sbin/sendmail“ sein (?!)

  • Es könnte ein grundsätzliches Problem mit sendmail sein
    (z.B. auf Windows-Webserver), oder
  • Es könnte ein grundsätzliches Problem mit dem Versenden von Emails über den Webserver sein, daher (Loop :wink:
  • Versuche mal andere Mailformulare aus dem Net, ob die was raussenden. Schön wäre es, wenn Du alternativ auch PHP-Mailormulare testen könntest…

Hope this helps

\q