Verzweifelnder: Mail mit php

Hi!

Ich habe mich schon ewig nicht mehr mit der PHP eigenen Mailfunktion beschäftigt und mich heute wieder etwas damit herumgespielt. Dabei stehe ich vor einem Problem, das ich früher nie hatte. Hier der Code:

$S_fromName = 'Jörg Lüttermann';
$S_fromMail = 'irgendwas@example.org';

$S_toName = 'Maria Böller';
$S_toMail = 'mail@example.org';

$S_subject = 'Hier können Sie die neue Mail Nummer 1 lesen';

$S_body = "Hallo!\n\nIch hoffe, es geht Dir gut!\nWöchentliche Bäder sind gesund.\n\nLiebe Grüße\n\nHampelmann";

$S_type = 'text/plain';

$S_from = mb_encode_mimeheader($S_fromName, 'UTF-8', 'Q').' <'.$S_fromMail.'>';
$S_to = mb_encode_mimeheader($S_toName, 'UTF-8', 'Q').' <'.$S_toMail.'>';
$S_subject = mb_encode_mimeheader($S_subject, 'UTF-8', 'Q');

$S_header  = "";
$S_header .= "MIME-Version: 1.0\n";
$S_header .= "Content-type: ".$S_type."; charset=UTF-8\n";
$S_header .= "Content-Transfer-Encoding: 8bit\n";
$S_header .= "From: $S_from\n";
$S_header .= "Reply-To: $S_fromMail\n";
$S_header .= "Return-Path: $S_fromMail";

$test = mail($S_to, $S_subject, $S_body, $S_header, $S_fromMail);

var_dump($test);

Das funktioniert wunderbar. Die Mail wird gesendet, kommt auch, was die Sonderzeichen betrifft, völlig korrekt an und $test ist TRUE. Soweit, sogut.

Wenn ich aber jetzt die mail-Zeile mit dem -f Flag erweitere, ändert sich das leider:

$test = mail($S_to, $S_subject, $S_body, $S_header, "-f$S_fromMail");

Da ist $test dann FALSE und die Mail wird nicht abgesendet. Ich verstehe das deshalb nicht, weil das bei meinen Versuchen vor mehreren Monaten nie ein Problem gewesen ist.

FRAGE: Kann es sein, dass mein Provider da irgendwas in den Einstellungen geändert hat in der Zwischenzeit und das -f deshalb Probleme bereitet jetzt? Oder woran kann es liegen, dass Mails wegen dem -f plötzlich nicht mehr gesendet werden? (Ich habe schon öfters gelesen, dass die Verwendung des -f deshalb gut ist, weil dann Mails weniger oft als Spam klassifiziert werden.)

Danke im Voraus!

Verzweifelnder

  1. n'Abend,

    Wenn ich aber jetzt die mail-Zeile mit dem -f Flag erweitere, ändert sich das leider:

    $test = mail($S_to, $S_subject, $S_body, $S_header, "-f$S_fromMail");
    

    Da ist $test dann FALSE und die Mail wird nicht abgesendet. Ich verstehe das deshalb nicht, weil das bei meinen Versuchen vor mehreren Monaten nie ein Problem gewesen ist.

    leider ist "hat bis vor kurzem noch funktioniert" noch keine Gewähr dafür, dass es auch bis in alle Zukunft funktioniert.

    FRAGE: Kann es sein, dass mein Provider da irgendwas in den Einstellungen geändert hat in der Zwischenzeit und das -f deshalb Probleme bereitet jetzt?

    Ja, das kann gut sein. Inzwischen muss man bei vielen Hostern in der Web-Konfiguration einstellen, welche Mailadresse als Absender verwendet wird. Erzwingt man mit dem Parameter -f eine andere Absenderadresse, geht's schief.

    Ich kann nicht versprechen, dass das in deinem Fall die richtige Erklärung ist, aber es wäre zumindest eine wahrscheinliche Erklärung.

    Einen schönen Tag noch
     Martin

    --
    Мир для України.
    1. Hi Martin!

      leider ist "hat bis vor kurzem noch funktioniert" noch keine Gewähr dafür, dass es auch bis in alle Zukunft funktioniert.

      Das ist/war mir schon klar! :-)

      Inzwischen muss man bei vielen Hostern in der Web-Konfiguration einstellen, welche Mailadresse als Absender verwendet wird. Erzwingt man mit dem Parameter -f eine andere Absenderadresse, geht's schief.

      Bei meinem (Domainfactory) sehe ich das nicht.

      Ich kann nicht versprechen, dass das in deinem Fall die richtige Erklärung ist, aber es wäre zumindest eine wahrscheinliche Erklärung.

      OK, verstehe!

      Liebe Grüße & vielen Dank für Deine Antwort!

  2. Moin,

    Das funktioniert wunderbar.

    Ich würde mich da nicht darauf verlassen dass das so wirklich überall funktioniert: ich würde dir dringend empfehlen eine Mailerklasse (z.B. PHPMailer) zu verwenden die das zusammenbauen der Mail für dich übernimmt und die Mails auch direkt über ein E-Mailkonto verschicken kann womit die Abhängigkeit von sendmail o.ä. wegfällt.

    Wenn ich aber jetzt die mail-Zeile mit dem -f Flag erweitere, ändert sich das leider:

    Gehört die Adresse in $S_fromMail zu dem Paket auf dem das Script läuft? Die Adresse die dort angegeben wird muss eine dem System bekannte Adresse sein welche befugt sein muss Mails über den Server zu verschicken.

    Generell solltest du auch beim From-Header keine E-Mailadressen von Seitenbesuchern o.ä. angeben, da diese in der Regel nicht berechtigt sind über den Server Mails zu verschicken, riskierst du damit dass die Mails in Spamfiltern hängen bleiben – verwende den Reply-To-Header.

    Gruß
    Tobias

    1. Hi Tobias!

      ich würde dir dringend empfehlen eine Mailerklasse (z.B. PHPMailer) zu verwenden

      Das ist mir eh bewusst, ich würde für komplexere Aufgaben auch auf PHPMailer zurückgreifen. Es war mir trotzdem ein Bedürfnis, die PHP Funktion unter Kontrolle zu haben und verwenden zu können bei Bedarf.

      Gehört die Adresse in $S_fromMail zu dem Paket auf dem das Script läuft?

      Ja, die Mailadresse gibt es wirklich und gehört zur Domain, unter der das Skript arbeitet.

      Generell solltest du auch beim From-Header keine E-Mailadressen von Seitenbesuchern o.ä. angeben

      Das ist/war nicht der Fall.

      verwende den Reply-To-Header

      Das tue ich ja eh. (Siehe Skript im OP).

      Liebe Grüße & Danke für Deine Antwort!