PHP-Problem mit send_mail

C

crazybratwurst

Gast
Hallo zusammen,

ich steh seit gestern vor nem kleinen mittelschweren und recht großen Problem.
Ich muss eine Webseite (PHP) überarbeiten (und ich hab kaum Plan von PHP) bzw. wieder gerade biegen in der mindestens drei unterschiedliche Webdesigner und Programmierer gearbeitet haben. Dadurch ist leicht etwas verpfuscht worden und seit Juli funktioniert ein Reservierungsformular nicht mehr. Genauer gesagt, kommt keine Mail mehr beim Empfänger an.

Das Formular hab ich wieder so hingebogen. Danch kommt noch ein Check der Anfrage anfrage_check.php ob die Daten richtig sind und dann werden die Daten per send_form.php versendet.

Folgendes hab ich in der send_form.php stehen (war schon von den vielen Programmierern vorgefertigt).

PHP:
<?php

  if (isset($HTTP_POST_VARS[cms_mail])) {
    $replace = array(
      "%%cms_ip%%" => $_SERVER[REMOTE_ADDR],
      "%%cms_date%%" => date("d.m.Y"),
      "%%cms_time%%" => date("H:i:s"));

    foreach($HTTP_POST_VARS as $key => $value) {
      if($key <> "cms_mail") {
        $replace["%%" . $key . "%%"] = $value;
      }
    }

    $cms->send_mail($HTTP_POST_VARS[cms_mail], $replace, $HTTP_POST_VARS[e-mail]);

    echo "<p> \n";
    echo "      Ihre Daten werden gesendet.<br>Vielen Dank!\n";
    echo "</p>\n";
  } else {
    echo "<p> \n";
    echo "      Ihre Daten konnten leider nicht erkannt werden!\n";
    echo "</p>\n";
  }
?>

Die Mail-Adresse müsste meines Wissens aber in der frontend.php ausgelesen werden:

PHP:
/*------------------------------------------------------------------------------

    class_cms_frontend -> send_mail

    Versendet eine Mail nach Vorlage (id) mit den entsprechenden 
    Datenfeldern (replace)

------------------------------------------------------------------------------*/

  function send_mail($id = 1, $replace = "", $from = "system@cms5.net") {
    $mail = new class_query("SELECT * FROM cms_d04 WHERE id = '$id';");
    
    if($mail->count > 0) {
      if($replace != "") {
        $message = strtr($mail->data['text'], $replace);
      } else {
        $message = $mail->data['text'];
      }
      mail($mail->data['empfaenger'], $mail->data['betreff'], $message, "From: $from");
    }
  }

Jetzt zur eigentlichen Frage (sorry für den vielen Text).
Wo wird jetzt die Mail-Adresse an die das Formular geschickt werden soll ausgelesen bzw. übergeben?

Wenn ich in
PHP:
mail($mail->data['empfaenger'], $mail->data['betreff'], $message, "From: $from");
den Empfänger angebe, kommt auch keine Mail beim Empfänger an.

Fragt wenn es Fragen gibt.. Ich bin ein Laie in PHP und selfphp.de & Co. konnten mir bisher auch noch nicht so richtig weiterhelfen..
 
Zuletzt bearbeitet:
Da wirst du wohl die send_mail-Funktion mal mit Debug-Anweisungen versehen müssen. Laß dir ausgeben, ob mail() überhaupt aufgerufen wird und wenn ja, mit welchen Parametern. Dann weißt du schon mal, ob es an mail() selbst oder am restlichen Code liegt.
 
Hallo crazybratwurst,

ich bin mir nicht mehr 100%tig sicher, und es kann auch sein, dass du deine Beispiele nicht vollständig eingefügt hast. Aber damit auf eine funktion in einer zweiten Datei zugreifen kann, musste man früher die andere Datei includen, sonst steht die Funktion nicht zur verfügung?!

Von daher ist debuggen schon das richtige stichwort.
 
Hallo zusammen.

Danke für eure Hilfe. Es hat sich herausgestellt, dass in den vorhergehenden Scripten einiges falsch war. Ich hab dann eben so ziemlich alles neu geschrieben. Jetzt funktioniert das Formular und das Versenden eigentlich sehr gut bis auf ein zwei Ausnahmen.

Die Mail kommt nicht bei Adressen mit @t-online.de, @hotmail.de und @web.de an. Komischerweise funktioniert es bei live.de, was ja das gleiche wie hotmail.de ist.

Hab ich etwas übersehen oder gibt es irgendwelche Einschränkungen beim send_mail-Befehl?

Hier mal der Code der fürs Versenden zuständig ist:

PHP:
<?PHP
/* Empfänger */
$empfaenger = array('<mail@mail.test>');

/* Absender */
$absender = 'Ihr Absender<mail@mail.test>';

/* Rueckantwort */
$reply = 'Ihr Admin<mail@mail.test>';

/* Betreff */
$subject = 'Reservierungsanfrage';

/* Nachricht */
$message = '<html>
    <head>
        <title>Reservierungsanfrage</title>
    </head>
    <body>
        <table width="600" border="2" cellspacing="0" cellpadding="0">
			<colgroup>
				<col width="30%">
				<col width="70%">
			</colgroup>
			<tr>
                <td>Name</td>
                <td>' . $HTTP_POST_VARS[name] . '</td>
            </tr>
			<tr>
				<td>Vorname</td>
				<td>' . $HTTP_POST_VARS[vorname] . '</td>
			</tr>
			<tr>
				<td>Strasse</td>
				<td>' . $HTTP_POST_VARS[strasse] . '</td>
			</tr>
			<tr>
				<td>Ort</td>
				<td>' . $HTTP_POST_VARS[ort] . '</td>
			</tr>
			<tr>
				<td>Land</td>
				<td>' . $HTTP_POST_VARS[land] . '</td>
			</tr>
			<tr>
				<td>Telefon</td>
				<td>' . $HTTP_POST_VARS[telefon] . '</td>
			</tr>
			<tr>
				<td>Fax</td>
				<td>' . $HTTP_POST_VARS[fax] . '</td>
			</tr>
			<tr>
				<td>E-Mail</td>
				<td>' . $HTTP_POST_VARS[email] . '</td>
			</tr>
			<tr>
				<td>Anreise</td>
				<td>' . $HTTP_POST_VARS[anreise] . '</td>
			</tr>
			<tr>
				<td>Abreise</td>
				<td>' . $HTTP_POST_VARS[abreise] . '</td>
			</tr>
			<tr>
				<td>Anzahl Erwachsene</td>
				<td>' . $HTTP_POST_VARS[anz_erw] . '</td>
			</tr>
			<tr>
				<td>Anzahl Kinder</td>
				<td>' . $HTTP_POST_VARS[anz_kinder] . '</td>
			</tr>
			<tr>
				<td>Alter Kinder</td>
				<td>' . $HTTP_POST_VARS[alter_kinder] . '</td>
			</tr>
			<tr>
				<td>Zimmer-Art</td>
				<td>' . $HTTP_POST_VARS[zimmerart] . '</td>
			</tr>
			<tr>
				<td>Anzahl Zimmer</td>
				<td>' . $HTTP_POST_VARS[anzahl_zi] . '</td>
			</tr>
			<tr>
				<td>Verpflegung</td>
				<td>' . $HTTP_POST_VARS[verpfl] . '</td>
			</tr>
			<tr>
				<td>Sonstiges</td>
				<td>' . $HTTP_POST_VARS[sonstiges] . '</td>
			</tr>
        </table>
    </body>
</html>
';

    echo "<p> \n";
    echo "      Ihre Daten wurden gesendet.<br>Vielen Dank!\n";
    echo "</p>\n";

/* Baut Header der Mail zusammen */
$headers .= 'From:' . $absender . "\n";
$headers .= 'Reply-To:' . $reply . "\n"; 
$headers .= 'X-Mailer: PHP/' . phpversion() . "\n"; 
$headers .= 'X-Sender-IP: ' . $REMOTE_ADDR . "\n"; 
$headers .= "Content-type: text/html\n";

// Extrahiere Emailadressen
$empfaengerString = implode(',', $empfaenger);

/* Verschicken der Mail */
mail($empfaengerString, $subject, $message, $headers);
?>

Wie gesagt, ich bin Anfänger in PHP und wirklich sehr dankbar über eure Hilfe.
Wenn ich was übersehen oder falsch gemacht hab, dann raus damit (:
 
Direkt im Code sehe ich jetzt nichts, du könntest aber mal alle Dateien nach den genannten Providern durchsuchen (zB grep oder wingrep) und kontrollieren, ob irgendwo im Code eine "Blacklist" definiert wurde.

Ansonsten würde ich eher auf eine Einstellung am Mailserver tippen.


so long
Renegade
 
Danke für die Antwort.

Ich hab mal alles durchgeforstet und eine festgelegte Blacklist existiert nicht. Nach ewiger Recherche im Web bin ich darauf gestoßen, dass es auch am Header liegen könnte, der dann als SPAM deklariert wird und gleich vornherein aussortiert wird.

Ich hab den Header jetzt schon so abgespeckt und umgebaut, dass nur noch folgendes drin steht:

PHP:
/* Baut Header der Mail zusammen */
$headers .= 'From: meinemail@test.test' . "\n";
$headers .= 'Reply-To: meinemail@test.test' . "\n"; 
$headers .= "Content-type: text/html\n";

Auch in den FAQ's von hosteurope bin ich fündig geworden und hab folgendes probiert:

PHP:
mail ($empfänger, $betreff, $nachricht, $headers, "-f absender@hier-bitte-ihren-domainnamen-einsetzen.de");

Leider bringt das auch noch nichts. Hat noch irgendeiner eine Idee?
 
Kurze Frage:

Ist die Absender Adresse von der gleichen Domain die deine Seite/Server hat?

Hatte damals auch Probleme als ich von einem Firmenserver die den Namen "xx.de" trug eMails mit folgender Domain versenden wollte "info@yy.de".

Viele Mail Anbieter filtern direkt solche Mails weil der Absender nicht zur Domain passt.
 
ja ist vom gleichen Format. Ich änder das mal ab und geb anschließend Rückmeldung.
 
Unser problem bei hosteurope war damals, dass der hostname vom system einfach mist war und die mails deswegen gefiltert worden sind. Das war im ursprung eine kombi aus ip-adresse des servers mit host-europe.de usw. einfach mal nachschauen und gegebenenfalls abändern ;)
 
Also das Abändern der Adressen hat keine Besserung gebracht.
Ich habe jetzt phpmail als neues Script eingebunden. Jetzt scheint es teilweise zu funktionieren.

Die ersten Mails kamen ohne Probleme an und wurden auch nicht als Spam erkannt. Egal bei welchen Provider. Jetzt werden die Mails aber bei unserem Provider als Spam erkannt. Dieser nutzt Spam-Assassin als Spamfilter. Ich bekomme deswegen auch in jeder Mail immer folgende Ausgabe:

Content analysis details: (5.2 points, 5.0 required)

pts rule name description
---- ---------------------- --------------------------------------------------
3.0 FH_HELO_ENDS_DOT Helo ends with a dot.
0.0 HTML_MESSAGE BODY: HTML included in message
1.7 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
1.1 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag
-0.6 AWL AWL: From: address is in the auto white-list

Dieses Helo ends with a dot. verursacht die meisten "Spam-Punkte" beim Spam-Assassin. Kennt jemand von euch diesen Fehler, bzw. kennt überhaupt jemand die Bedeutung dazu? Im Netz findet man kaum was dazu.

Danke übrigens nochmal für eure bisherigen Bemühungen und eure Geduld.
 
Das genaue Problem kenne ich zwar nicht, aber Helo ist generell ein Paket, das im Authentifizierungsprozess von SMTP verwendet wird. Eventuell hast du hier etwas falsch eingestellt (Punkt am Ende?? :D)


so long
 
Soweit war ich schon und ich bin gerade am Suchen, aber ich kann keinen Punkt am Ende von einem HELO oder EHLO Befehl finden. Ich benutze die Standarddateien vom PHP-Mailer. Ich häng sie mal als Anhang mit ran. Sollte jemanden langweilig sein und sich erbarmen, könnte er ja mal drüberschauen (;
 

Anhänge

  • PHP-Mailer.rar
    22,8 KB · Aufrufe: 215
Zurück
Oben