Hallo zusammen,
die Sache hat mich den ganzen Nachmittag gekostet, und jetzt möchte ich der Community ein bißchen zurückgeben; ich bin sicher, daß über das folgende Problem schon Viele gestolpert sind.
Und los geht's:
Ich war heute endlich so weit, Testbestellungen im Shop zu machen. Leider wurden keine Bestätigungs-Mails versendet. Ich habe in der E-Mail-Konfiguration alle sinnvollen Kombinations-Möglichkeiten ohne Erfolg getestet. Da ich den betreffenden SMTP-Server unter eigener Kontrolle habe, konnte ich auch dort testweise einige Einstellungen ändern. Nach einigen Stunden habe ich die Ursache des Problems gefunden und (notdürftig) behoben:
Grundsätzlich arbeiten wir per SMTP ("E-Mail-Transport-Methode") auf Port 25 ("SMTP-Port") mit STARTTLS ("SMTP SECURE" auf TLS), und natürlich mit SMTP-Authentifizierung ("SMTP-Auth" = JA). Im Prinzip funktioniert diese Konfiguration.
Das Problem:Es gibt mehrere Arten der SMTP-Authentifizierung, z.B. PLAIN, LOGIN, CRAM-MD5, Kerberos usw. Jedoch gibt es dafür
keine Auswahlbox in der Konfigurations-Oberfläche! Nach Durchsicht des Quellcodes ist zudem klar, daß auch intern (also quasi "heimlich" im Code) seitens modified die Art der Authentifizierung
nicht gesetzt wird.
Das bedeutet, daß PHPMailer dann sein eigenes Default-Verfahren anwendet, und das war bei uns CRAM-MD5; vermutlich ist es bei PHPMailer der Default, weil es zumindest nicht total unsicher ist.
Für uns war das ein Problem: Unser SMTP-Server in Internet bietet zwar generell CRAM-MD5 jedem Client an, läßt aber in einem nachgeschalteten Filter diese Art der Authentifizierung nur für bestimmte Clients zu (darauf kann ich nicht näher eingehen). Was dagegen wirklich jedem Client offen steht, ist die PLAIN-Authentifizierung. Diese stellt (in unserem Fall!) kein Sicherheits-Risiko dar, da ausschließlich TLS-verschlüsselte Verbindungen zum Einsatz kommen.
Damit war der Weg zur Lösung klar. Wir haben im Code die Stelle gesucht, an der die Optionen für das $mail-Objekt gesetzt werden, und eine Zeile hinzugefügt. In der Datei /inc/xtc_php_mail.inc.php haben wir die Zeile
$mail->SMTPAuth = (SMTP_AUTH == 'true') ? true : false;
durch folgende Zeilen ersetzt:
$mail->SMTPAuth = (SMTP_AUTH == 'true') ? true : false;
$mail->AuthType = 'PLAIN';
Wie man sieht, haben wir das PLAIN-Verfahren hart kodiert. Diese Lösung ist natürlich nur vorübergehend und nicht update-sicher, aber einfach zu verstehen und von jedem leicht anzuwenden, der ein ähnliches Problem hat. Wir werden vermutlich jetzt unseren SMTP-Server umkonfigurieren, aber das wird wegen der dort vorhandenen Spezial-Lösung dauern.
Bislang war diese Spezial-Lösung kein Problem, weil wir bisher bei allen (!) verwendeten SMTP-Clients die Art der SMTP-Authentifizierung explizit festlegen mußten. modified mit PHP-Mailer ist der erste Client, der zu smart vorgeht und aus den vom Server angebotenen Verfahren das sicherste wählt.
Der Feature-Request besteht nun darin, in die E-Mail-Konfiguration eine zusätzliche Zeile mit einer Drop-Down-Box einzubauen, aus der das gewünschte Authentifizierungs-Verfahren gewählt werden kann. So machen es Mail-Clients auch, z.B. Thunderbird. Diese Auswahl muß dann lediglich an der oben genannten Stelle im Code berücksichtigt werden. Für die Entwickler des modified-Shop ist das sicher ein No-Brainer.
Viele Grüße und vielen Dank,
Eihops
Linkback: https://www.modified-shop.org/forum/index.php?topic=42637.0