mail Funtion von PHP

Guten Nachmittag,

Ich habe ein Problem mit dem automatischen Versenden von Mails in PHP.
Um das Problem kurz zu erläutern - Ich habe für meinen Skatverein ein kleines Programm geschrieben, in dem die Eregbnisse eingegeben werden müssen, damit dann die Tabelle errechnet wird und diese dann als Mail an alle Personen geht. In den letzten Monaten hat alles gut geklappt, aber seit letzter Woche besteht das Problem, dass manche Mails nicht ankommen.
Im Counter bei bplaced kann ich sehen, dass die Zahl der Mails nach oben steigt. Nachdem der Spielleiter noch einmal an alle gesendet hat haben manche Mitglieder die Mail bereits zum zweiten mal erhalten, die anderen aber noch immer nicht.

Ich habe bereits nachgeschaut, ob es eine Ähnlichkeit bei den Mitgliedern gibt, die es nicht bekommen haben. Vielleicht alle beim selben Anbieter. Aber dem war nicht so. Auch am Namen (beispielsweise mit Umlaut liegt es nicht).

Ich habe bereits im Forum ein wenig gesucht, aber eine Lösung nicht gefunden.

Mein PHP-Code:

// Email
$to = $row['Email'];// Kommt aus der Whileschleife
$from = "skatclub61@bplaced.net";
$subject = "Ergebnis vom letzten Spielabend";
$headers = "From: $from\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";// charset=utf-8 auch versucht
$message = "Beispieltabelle";// gekürzt hier
$sender = "-f ".$from;
mail($to, $subject, $message, $headers, $sender);

Ich hoffe, dass jemand meinen Fehler findet. Mir wird es gerade sehr unangenehm gemacht hier.

Mehrere Sachen fallen mir auf:

  • RFC-2822 sagt, header muessen mit carriage return, linefeed (CRLF) getrennt werden (duerfen auch nicht mit einem leerzeichen beginnen) $headers = "From: $from\r\n";

  • Die adresse des sendmail_path-arguments ($sender = "-f ".$from;) muss direkt auf die option (-f) folgen, also: $sender = "-f$from";

  • Error checking?!

if(!mail($to, $subject, $message, $headers, $sender))
echo(error_get_last()[‘message’]);


* Return-Path header fehlt, falls die mails bouncen

Guten Morgen und besten Dank für deine Antwort bisher. Leider habe ich es auch damit nicht geschafft. ABer über die Funktion des Reply-To bin ich dann doch begeistert. Leider bringt uns das nicht weiter.

$to = $row['Email'];
$from = "skatclub61@bplaced.net";
$subject = "Ergebnis vom letzten Spielabend";
$headers = "From:$from\r\n";
$headers .= "MIME-Version:1.0\r\n";
$headers .= "Content-type:text/html;charset=utf-8\r\n";
$headers .= "Reply-To:(Adresse Spielleiter)\r\n";
$headers .= "Return-Path:(Meine Adresse)\r\n";
$message = "Ein Text";
$sender = "-f$from";
if (!mail($to, $subject, $message, $headers, $sender))
	echo "Problem bei $to. Message: ".error_get_last()["message"]."<br />";
else
	echo "message sent<br />";

Bei mir selbst sind die Mails angekommen. Auch die Test von vorhin. Leider aber alle im Spamordner. Aber hauptsache sie kommen überhaupt an.

Hi xtyner,

die E-Mails werden bei einigen im SPAM landen, da die E-Mail Adresse, welche du hinterlegt hast auf einen anderen Server liegt (die mail(xxx)-Funktion wird von einigen Postfach Anbietern als SPAM markiert, da hier jegliche Absender Daten eingetragen werden können, und die versand Daten nicht richtig hinterlegt sind).

Um dieses Problem zu umgehen, empfehle ich dir das ganze über SMTP zu versenden.
Damit bist du nicht an die 100 Mail Regel gebunden, du brauchst aber bplaced PRO (wegen Sockets + SMTP), sowie eine real existierende E-Mail Adresse.
Die E-Mails kannst du dann z.B. mit diesem Script verschicken: https://github.com/PHPMailer/PHPMailer

Das ist nicht vollkommen richtig. Mit validen spf und DKIM records wuerden auch die nicht im spam ordner landen. (Jedenfalls nicht bei den gaengisten anbietern).

Ich wuerde mich selbst auch als schlechten developer bezeichnen, wenn ich nicht auf die openSource variante hinweisen wuerde: Lass bei dir einen lokalen webserver laufen, parse deine db und verschick die mails so ueber smtp (bspw. googlemail, zoho, etc). Dann hast du keinerlei stress mit irgendwelchen limits (ausser dem limit von 50 mails pro stunde…was wohl kaum ins gewicht fallen duerfte).

Ok besten Dank erst einmal. Die Antworten sehen mir erst einmal so komplex aus, dass ich das wohl nicht zwischen den Vorlesungen schaffe zu implementieren/testen.
Ich werde mir Mühe geben das morgen einmal durchzutesten und dann eine neuen Probleme, oder Danksagungen zu schreiben.

Bis hierher an euch beide besten Dank!