Hallo,
eine kurze Frage zu PHPMailer:
Anhand welcher Kriterien wird entschieden, ob PHPMailer::send() als $this->Mailer den Eintrag “mail” oder “smtp” verwendet?
Ich habe ein kleines Problem mit der e-Mail Funktion, entsprechend meiner Logs wird gerade von oxemail die Funktion PHPMailer->send() aufgerufen.
Es werden korrekte Daten an die Funktion übergeben, irgendwo kommt es dann zum Fehler und das Senden der Mail bricht ab.
Als Mailer verwendet meine Liveinstallation “mail”. Woran kann das liegen?
Schau doch in den Code, steht alles in oxemail und phpmailer. Kurz: Wenn ein SMTP-Host eingegeben wurde, wird SMTP verwendet, wenn SMTP fehlschlägt oder kein Host angegeben wurde, wird mail verwendet.
danke, aber das ist mir schon klar.
was ich nicht verstehe:
ich habe natürlich den smtp Server unseres Entwicklungsservers eingetragen dennoch wird im Log als Mailer nicht “smtp” sondern “mail” eingetragen.
Oxemail habe ich um eine eigene SendEmail Funktion erweitert. Diese Funktion wird auch richtig abgearbeitet und die Email wird hier korrekt verschickt.
Jedoch werden keine Bestätigungsmails aus oxorder->finialize geschickt, hier tritt dann der oben beschriebene Fehler auf.
Das ist wahrscheinlich der Fallback auf mail wenn SMTP fehlschlägt, falsche Zugangsdaten etc., aus oxemail.php:
// try to send mail via SMTP
if ( $this->getMailer() == 'smtp' ) {
$blRet = $this->_sendMail();
// if sending failed, try to send via mail()
if ( !$blRet ) {
// failed sending via SMTP, sending notification to shop owner
$this->_sendMailErrorMsg();
// trying to send using standard mailer
$this->setMailer( 'mail' );
$blRet = $this->_sendMail();
}
} else {
// sending mail via mail()
$this->setMailer( 'mail' );
$blRet = $this->_sendMail();
}
Das müsste man debuggen was da genau passiert, mit Testausgaben schauen ob getMailer() ‘smtp’ zurückliefert. Falls ja: in phpmailer
public $SMTPDebug = true;
setzen, falls nein in getMailer() schauen warum nicht. Falls du schon was geändert hast am Shop würde ich mal eine Testinstallation frisch aufsetzen und da mal ausprobieren.
ok. Vielen Dank für den Hinweis.
Habe eben eine frische Testversion aufgelegt und versuche nun alle Schritte die ich bereits gemacht habe, zu reproduzieren. Irgendwann taucht dann sicher der Fehler auf, dann weiß ich Bescheid.
Stephan
noch eine kurze Frage: wo finde ich dann die SMTP debug-Einträge?
danke Euch.
Habe das Problem nun analysiert.
Beim lokalen System werden die Mails richtig versendet und als mailer ist SMTP.
Beim Livesystem wird das Versenden abgebrochen, der Debugger meldet als Fehler, dass der Messagebody leer ist.
Das kann ich nicht ganz nachvollziehen, da beide Systeme identisch sind…
!Aktuell habe ich herausgefunden, dass der Unterschied zwischen beiden Systemen darin besteht, dass die lokale Version nicht UTF8 ist, die Liveversion ist UTF8. Wenn ich dies in der config.inc des Livesystems ausschalte, dann geht die email Funktion auf einmal!
Dies kann ich nun schon gar nicht nachvollziehen.
Kann mir das bitte jemand erklären?
=> Fehlerursache gefunden:
Bei der UTF8 Codierung wurde in Backend->Einstellungen->weitere Einstellungen der Eintrag für die Währungen nicht gesetzt (den Grund kenne ich nicht - bei utf8 leer, wenn NICHT utf8, dann richtige Einträge), habe also:
EUR@ 1.00@ ,@ .@ €@ 2
eingetragen. Nun kann auch bei eingeschaltetem UTF8 der php-Mailer den e-Mail Body parsen und der Fehler ist behoben.
Trotzdem kann ich das ganze nicht ganz nachvollziehen und vielleicht kann es mir jemand von den Profis hier erklären.
Danke