• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Einfacher Webmailer funktioniert nicht

Philipp684

Neues Mitglied
Hallo ich habe auf meiner Seite einen einfach Webmailer versucht zu Implementieren, aber es funktioniert einfach nicht.

Auf der Webseite gibt es unten ein "Kontaktformular" mit Name,eMail,Betreff, und Nachricht dass dann an eine mailer.php weitergegeben wird.

Aber es kommt nur immer die "Error Return" Seite. Ich verstehe einfach nicht warum...


Und es müsste ja so sein, dass die Mail von der Domain aus gesendet wird, bzw von dem Mailserver der Hosting Firma.
villeicht gibt es damit ein problem?

Villeicht hat einer mal kurz zeit mir dabei zu helfen, ich weiß es ist Sonntag. Aber manche Menschen arbeiten gerne Sonntags an ihren Webseiten ;)


Mfg.
 
Werbung:
So sieht das Formular aus:

<section class="6u 12u(narrower)">
<h3>Hinterlassen sie eine Nachricht (vorübergehend Deaktiviert)</h3>
<form method="post" action="/mailer.php">
<p><label>Name:<br><input type="text" name="Name"></label></p>
<p><label>E-Mail:<br><input type="text" name="Mail"></label></p>
<p><label>Betreff:<br><input type="text" name="Betreff"></label></p>
<p><label>Nachricht:<br>
<textarea name="Nachricht" cols="50" rows="8"></textarea></label></p>
<input type="submit" value="Senden">
</form>
</section>

das ist die mailer.php
PHP:
<?php

// ======= Konfiguration:

$mailTo = '[email protected]';
$mailFrom = '"Kontaktformular" <[email protected]>';
$mailSubject    = 'Kontaktformular';
$returnPage = 'http://domain.de/mailok.php';
$returnErrorPage = 'http:/domain.de/mailerror.php';
$mailText = "";

// ======= Text der Mail aus den Formularfeldern erstellen:

// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) {
   // alle Formularfelder der Reihe nach durchgehen:
   foreach($_POST as $name => $value) {
      // Wenn der Feldwert aus mehreren Werten besteht:
      // (z.B. <select multiple>)
      if(is_array($value)) {
          // "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ":\n";
          // alle Werte des Feldes abarbeiten
          foreach($valueArray as $entry) {
             // Einrückungsleerzeichen, Wert und Zeilenumbruch
             // dem Mailtext hinzufügen
             $mailText .= "   " . $value . "\n";
          } // ENDE: foreach
      } // ENDE: if
      // Wenn der Feldwert ein einzelner Feldwert ist:
      else {
          // "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ": " . $value . "\n";
      } // ENDE: else
   } // ENDE: foreach
} // if

// ======= Korrekturen vor dem Mailversand

// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
 if(get_magic_quotes_gpc()) {
     // eventuell eingefügte Backslashes entfernen
     $mailtext = stripslashes($mailtext);
 }

// ======= Mailversand

// Mail versenden und Versanderfolg merken
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);

// ======= Return-Seite an den Browser senden

// Wenn der Mailversand erfolgreich war:
if($mailSent == TRUE) {
   // Seite "Formular verarbeitet" senden:
   header("Location: " . $returnPage);
}
// Wenn die Mail nicht versendet werden konnte:
else {
   // Seite "Fehler aufgetreten" senden:
   header("Location: " . $returnErrorPage);
}

// ======= Ende

exit();

?>

 
Zuletzt bearbeitet:
Mit der PHP-Funktion mail() kann man E-Mails versenden. Aber damit hat der Entwickler oft viele Sorgen. Für den korrekten E-Mail Versand sind verschiedene Mail-Header notwendig. Ohne die richtigen Header bekommen viele Mail-Clients Probleme bei der Anzeige oder empfangen diese erst gar nicht. Allerdings ist es aufgrund der Komplexität sehr aufwändig, alle sich damit befassenden RFC-Dokumente selbst durchzuarbeiten und anzuwenden. Stattdessen sollte man Mailerklassen w.z.B. den phpMailer, verwenden, die diese Header korrekt einbinden.

Und das nächste Mal bitte die Formatierungsmöglichkeiten des Forums nutzen: [ php ]Quellcode[ /php ]
Ohne die Blanks bei den eckigen Klammern
 
Werbung:
so habe ich jetzt geändert aber wie hilft mir das jetzt weiter, ich bin neu in dem Bereich und suche nur ein einfaches Kontaktformular mehr nicht....

Das wird eh nur 2mal im Monat benutzt deswegen habe ich keine hohen ansprüche daran.

Je einfacher desto besser.. Spam mails etc. sind mir egal
 
Du solltest auf jeden Fall schon mal den ganzen Code mit
PHP:
if(isset($_POST)) {
einklammern, denn es wird sonst immer ein Mail gesendet, auch ohne Formular.
Ansonsten solltest du dir mal alle Variablen ausgeben lassen, um eventuell einen Fehler zu finden, das nennt sich

Richtig debuggen

  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
Und mit einer Mailer-Klasse stellst du sicher, dass Mails überhaupt ankommen, denn die Mail-Funktion von PHP ist eine Krücke.
 
So der Mailer Funktioniert jetzt! Das Problem war dass ich in meiner Domain, ein Umlaut (Ö) hatte.

Also



    • $mailFrom = '"Kontaktformular" <webmail@köln.de>' (ALT)
    • $mailFrom = '"Kontaktformular" <webmail@xn--kln-sna.de.de>' (GEÄNDERT IN PUNICODE)
Und schon funktioniert das Script, es wurde nichts anderes geändert!
 
Werbung:
Also ich kann nur empfehlen, die E-Mails per Bash (shell_exec()) zu senden.
Da gibt es in der Regel keine Probleme mit!
 
Zurück
Oben