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

PHPMailer aus DB macht fehler.

Cheffchen

Senior HTML'ler
Hallo,

gleich mal zu meine Problem.
Ich nutze PHPMailer um viele Mails zu verschicken. Die Mails sind Personalisiert also werden die in der DB schleife zusammen gesetzt und gesendet.
Nun Tritt ab und zu ein fehler auf in demn eine E-Mail zwar die richtige Empfänger E-Mail und Betreff hat aber der body der E-Mail passt nicht dazu und ist von ein anderen Datensatz.

Ich habe so eine vermutung, das in der Schleife vorher ein fehler passiert in PHPMailer weil E-Mail-adresse ihm nicht gefällt oder so und damit die mail nicht verschickt wird und bei der nächsten schleife nur E-Mail-Adresse durch $mail->ClearAddresses(); bereinigt wird und Betreff überschrieben wird aber Body ($mail->MsgHTML($body);) vom vorhergehenden Datensatz bleibt und wird gesendet vom vorhergehenden und nicht vom Aktuellen.

Hoffe das hat jemand verstanden :O)
Kann das vielleicht sein und/oder wie bekomme ich das $mail->MsgHTML($body); bereinigt oder überschrieben oder was weis ich?

Is blöd da ich das selber nicht nachvollziehen kann und das nur mit bekomme wenn mir einer schreibt was er für eine E-Mail bekommen hat :O)

Cheffchen
 
Deine Vermutung halte ich für sehr unwahrscheinlich.

Fragst du den phpMailer, ob ein Fehler aufgetreten ist, und falls ja, reagiert dein Script dann entsprechend?
 
ClearAddresses() sollte eigentlich reichen, wenn sich nur der Empfänger-Header ändert.

Um sicher zu gehen, könntest du das Mail-Objekt auch in jeder Wiederholung überschreiben. Damit gehst du auf Nummer sicher, wenn du das Objekt wirklich absolut zurücksetzen willst.
PHP:
$mail = new PHPMailer();
 
Hallo,

jemand der das verstand hat :O).

Fragst du den phpMailer, ob ein Fehler aufgetreten ist, und falls ja, reagiert dein Script dann entsprechend?
was verstehst denn darunter?

also mal im goben der code
PHP:
$mail = new PHPMailer(true);
$mail->SetLanguage("de", "language/");

$mail->IsSMTP(); // telling the class to use SMTP
$mail->IsSendmail();  // tell the class to use Sendmail
$mail->Host          = "xxxxx"; // sets the SMTP server
$mail->SMTPAuth      = true;                  // enable SMTP authentication
$mail->SMTPKeepAlive = true;                  // SMTP connection will not close after each email sent
$mail->Port          = 25;                    // set the SMTP port for the GMAIL server
$mail->Username      = "xxxx"; // SMTP account username [email protected]
$mail->Password      = "xxxx";        // SMTP account password

$mail->SetFrom("[email protected]","Xxxxxxxxxxx");

#DB zeug mit der schleife
while($ausgabe = mysql_fetch_array($result)){

    $mail->Subject = "Betreff der immer passt";
    $mail->AddAddress("$ausgabe[email]","$ausgabe[vorname] $ausgabe[name]");
    $body = "<html><body>Personalisierter Inhalt der sehr selten mal auch nicht passt</body></html>";


    $mail->MsgHTML($body);
    $mail->IsHTML(true);

    if(!$mail->Send()) {
      echo "<br>Mailer Error: " . $mail->ErrorInfo."<br>";
    } else {
      echo "<br>Message sent!<br>";
    }
    $mail->ClearAddresses();
    $mail->ClearAttachments();
}
Das ist doch alles Standard und nichts besonderes.
Wie gesagt ich weis nur das der fehler sehr selten auftritt aber nichz so richtig wie das eingrenzen kann oder behben.
Auch so das läuft über ein cronjob.

Cheffchen
 
Um sicher zu gehen, könntest du das Mail-Objekt auch in jeder Wiederholung überschreiben. Damit gehst du auf Nummer sicher, wenn du das Objekt wirklich absolut zurücksetzen willst.
PHP:
$mail = new PHPMailer();
is eigentlich auch eine idee, ich habe das bis jetzt nicht gemacht weil ich dachte das Senden länger dauert da jedes mal eine SMTP verbindung aufgebaut werden muss, aber dachte ist halt schrott, also werde ich das auch mal tetsten.

Cheffchen
 
ich vermute, dass der code nicht vollständig ist und der fehler in der belegung der body variable liegt. setz am anfang der schleife mal ein $body = "{content}"; ein und lass dir vor dem senden mal den body ausgeben. am besten $mail->Send() auskommentieren und durchlaufen lassen.
 
ich vermute, dass der code nicht vollständig ist und der fehler in der belegung der body variable liegt. setz am anfang der schleife mal ein $body = "{content}"; ein und lass dir vor dem senden mal den body ausgeben. am besten $mail->Send() auskommentieren und durchlaufen lassen.
Hallo,
klar ist der code nur ein teil orig ist ca 700 Zeilen code aber alles nur $body inhalt oder anlagen.
Versteh nicht was $body = "{content}"; passieren soll?
$body wird in jeder schleife neu zusammen gesetzt und dann in $mail->MsgHTML($body); an PHPMailer übergeben.

@ALL:
Bin für alles offen und probiere Aktuell das mit $mail = new PHPMailer(); in jeder schleife aus, der test lief durch und mal schauen ob sich wieder jemande beschwert.

Cheffchen
 
ich vermute, dass der body irgendwo nicht überschrieben wird. wenn du $body klar mit {content} überschreibst kannst du bei einer ausgabe danach suchen und feststellen bei welchen mails etwas schief geht. sollte dir wiedererwarten eine testreihe e-mails raus gehen, reiß man dir nicht den kopf ab, wenn dort {content} im body steht ;) etwas eleganter als "testestn gucken obs geht" o.ä.
 
Zurück
Oben