mail() und Schleifen
riethmunk
- php
Hallo Leute,
ich will einen Newsletter verschicken, in dem jeder persönlich angesprochen wird. Das mit dem herstellen des Newsletter klapp schon fehlerfrei, da ja alles aus der Datenbank geholt wird. Nun scheitert es aber beim Versand mit mail(), kann es daran liegen, dass mail() in einer Schleife liegt und nicht so schnell hintereinander ausgeführt werden kann? Gibt es andere Möglichkeiten? Hier unten ist die Benutzte Schleife:
for ($e = 0; $e <= mysql_num_rows($list_result); $e++){
$store_list = mysql_fetch_array($list_result);
$email = $store_list["email"];
$recipient = "$email";
$msg_neu = $msg_final[$e];//Der persönliche Newsletter
@mail("$to", "$topic", $msg_neu, $header);
}
Gruß riethmunk
hi,
@mail("$to", "$topic", $msg_neu, $header);
die hier vorkommenden variablen sollten alle definiert sein ...
mfg
mamue
Hallo,
das sind sie ja, wollte jetzt aber nich den ganzen Quelltext posten.
Gruß riethmunk
Hallo riethmunk,
versuchs mal mit
if @mail("$to", "$topic", $msg_neu, $header)
sleep(1)
else
// error.log öffnen und Fehler protokollieren
MfG,
Hartmut R.
hi,
dann tippe ich darauf, dass es an $header liegt; gib vielleicht auch einmal das '@' vor mail weg, dann bekommst du eventuell genauere fehlermeldungen; wenn dies auch nichts hilft, dann probier alles einmal ohne schleife, indem du nur die 4 variablen des mail-befehls vorher händisch setzt; so kannst du den fehler eingrenzen; wenn du das ganze lokal testest, vergiss nicht einen smtp-server in der php.ini anzugeben ...
prinzipiell funzt das aber, weil ich ganz genau auf die gleiche art und weise einen newsletter (selbst programmiert) versende; auch der sleep-befehl ist bei mir nicht nötig;
hoffe, ich konnte helfen!
mfg
mamue
hi,
dann tippe ich darauf, dass es an $header liegt; gib vielleicht auch einmal das '@' vor mail weg, dann bekommst du eventuell genauere fehlermeldungen;
Mein header hat folgenden Inhalt(bitte nicht gleich schimpfen wegen html-mail)
$header = "From: riethmunk\n";
$header .= "Reply-To: riethmunk@gmx.de\n";
$header .= "Content-Type: text/html\r\nContent-Transfer-Encoding: 8bit\r\n";
Wenn ich @ wegnehme gibt es keine Fehlermeldung, es kommt nur
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request ... und so weiter
Die ersten zwei Mails werden aber verschickt, die dritte nicht. (erst drei Einträge in der Datenbank vorhanden.)
Gruß riethmunk
hallo,
ich schick dir mal den code, der bei mir funzt:
...
@mail( "$mail_to", "$mail_subject", "$message", "From: $mail_from_name<$mail_from>\r\nContent-Type: text/html\r\n"))
...
vielleicht gibtst du bei deinem code einmal die variablen des mail-befehls aus, bevor du versuchst, die mails zu senden:
echo $to, $topic, $msg_neu, $header;
exit(); ... damit der rest nicht ausgeführt wird
möglicherweise entdeckst du so einen fehler; sonst weiß ich jetzt leider auch fast nicht mehr weiter; bei mir geht alles wunderbar: 120 mails in unter 10 sekunden; allerdings habe ich mich auch lange gespielt, bis es gegangen ist (vor allem die sache mit \r\n ) ...
mfg
mamue
Hi!
Wenn ich @ wegnehme gibt es keine Fehlermeldung, es kommt nur
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request ... und so weiter
Das kommt bei mir meist durch ungültige bzw. nicht vorhandene email-Adressen, daher prüfe ich vor jedem mail wenigsten, ob die email-Adresse(Empfänger) ein "@" enthält.
Weitere Fehlerquelle ist das Provider im allgemeinen Scripte nicht mit unbegrenzter Last und nicht unendlich lange laufen lassen. Wenn Dein NEwsletter irgendwann mal einige 100 Adressen hat, wird er bei einem "normalen" Provider nicht mehr funktionieren.
Grüße
Andreas
Hallo Leute,
ich will einen Newsletter verschicken, in dem jeder persönlich angesprochen wird. Das mit dem herstellen des Newsletter klapp schon fehlerfrei, da ja alles aus der Datenbank geholt wird. Nun scheitert es aber beim Versand mit mail(), kann es daran liegen, dass mail() in einer Schleife liegt und nicht so schnell hintereinander ausgeführt werden kann? Gibt es andere Möglichkeiten? Hier unten ist die Benutzte Schleife:for ($e = 0; $e <= mysql_num_rows($list_result); $e++){
$store_list = mysql_fetch_array($list_result);
$email = $store_list["email"];
$recipient = "$email";$msg_neu = $msg_final[$e];//Der persönliche Newsletter
@mail("$to", "$topic", $msg_neu, $header);
}Gruß riethmunk
Hallo,
von wo verschickst Du Deine Mails? Wenn Du das von Deinem eigenen Webserver aus verschickst, musst Du sicherstellen, dass Du in der php.ini eine SMTP-Direktive eingerichtet hast.
Ansonsten mal ein Mail-Code, der bei mir einwandfrei funktioniert:
$name = "Test-Absender";
$absender = $mail; //$mail beinhaltet die email-Adresse des Senders
$header="From:$name<$absender>\n";
$header .= "Reply-To: $absender\n";
$header .= "X-Mailer: PHP/" . phpversion(). "\n";
$header .= "X-Sender-IP: $REMOTE_ADDR\n";
$header .= "Content-Type: text/plain";
mail("$to","Newsletter", $message, $header);
Gruß,
Wagyman