Mail SMTP Test

  PHP, Tipps und Tricks

Grundsätzliches

Es gibt einige Möglichkeiten zu schauen, ob eine Email via SMTP versendet wurde oder via PHPMailer.
Die erste Möglichkeit ist mMn. [MB] am besten, da sie mehr Details zeigt.

  1. Selbständig eine PW-Vergessen mail zusenden
  2. aktivieren von „SMTP-Debugging“ in der config.inc.php (wird aber für alle Sichtbar sein, also AUCH KUNDEN!)
  3. eine Datei mit nachfolgendem Inhalt erstellen. Diese dann via url aufrufen:
    www.example.de/[kürzel]d3smtp.php

    UNBEDINGT die Datei danach löschen ODER alle Rechte entfernen!
<?php
require_once "bootstrap.php";

$oConfig = \OxidEsales\Eshop\Core\Registry::getConfig();

$recipient = $oConfig->getRequestParameter("recipient") ;
$smtpHost = $oConfig->getRequestParameter("host");
$smtpPort = $oConfig->getRequestParameter("port");
$smtpUser = $oConfig->getRequestParameter("user");
$smtpPass = $oConfig->getRequestParameter("pass");

print '<html>
<body>
<form action="">
    <table width="">
        <tr>
            <td><input type="text" name="host" placeholder="host" value="'.$smtpHost.'" /></td>
            <td><input type="text" name="port" placeholder="port" value="'.$smtpPort.'" /></td>
            <td><input type="text" name="user" placeholder="user" value="'.$smtpUser.'" /></td>
            <td><input type="text" name="pass" placeholder="pass" value="'.$smtpPass.'" /></td>
            <td><input type="text" name="recipient" placeholder="recipient" value="'.$recipient.'" /></td>
            <td><button type="submit">📧</button></td>
        </tr>
    </table>
</form>
</body>
</html>';

if($smtpHost && $smtpPort && $smtpUser && $smtpPass && $recipient)
{
    $oEmail = oxNew(\OxidEsales\Eshop\Core\Email::class);

    $oEmail->IsSMTP();
    $oEmail->SMTPDebug = 3;
    $oEmail->SMTPAuth = true;
    $oEmail->Host = $smtpHost;
    $oEmail->Port = $smtpPort;
    $oEmail->SMTPSecure = "tls";
    $oEmail->Username = $smtpUser;
    $oEmail->Password = $smtpPass;


    $oEmail->setFrom($smtpUser);
    $oEmail->setRecipient($recipient);
    $oEmail->setSubject($smtpUser." Test Email from ".gethostname());

    $oEmail->setBody("<h1>".date("Y-m-d H:i:s")."</h1>");
    $oEmail->setAltBody(date("Y-m-d H:i:s"));

    var_dump($oEmail->send());
}

Worauf ist zu achten?

  • Erste Möglichkeit:
    • man bekommt also die PW-Zurücksetzen-Email
    • öffnet sie im gewünschten Postfach
    • klickt auf Details und findet sich sie Kopfzeilen, am besten Alle
      • zu finden dann ein Eintrag „Received“ dort muss SMTP oder ESMTP zu finden sein. Damit ist dann immerhin SMTP (oder eine Erweiterung) dessen benutzt worden
      • nun muss noch überpüft werden, dass „X-PHP-Originating-Scriptnicht zu finden ist
        • dieser Eintrag ist nur zu finden, wenn PHPMailer verwendet wurde
      • zusätzlich kann der Wert (meist) ganz unten unter „X-SpamAssassin“ überprüft werden
        • der ist oftmals im Minusbereich, sobald SMTP erfolgreich angewendet wurde
        • dieser Wert ist mit Obacht zu geniesen:
          • er kann trotz dessen, dass es (E)SMTP ist, über 0 sein, weil
            • es entweder trotzdem PHPMailer nutze (Fallback? Fehler?)
            • es bereits viele Mail-Tests gab und nun der Handler denkt, es sei SPAM
  • Zweite Möglichkeit:
    • erstellen der Datei
    • eintragen der SMTP Daten (SMTP-Port meist 587)
    • ganz rechts auf den kleinen Brief klicken
      • Ergebnis sollte sein, dass es klappt und einige Einträge erscheinen
      • im besten Falle sieht man direkt (E)SMTP oder man sucht eben via STRG + F nach SMTP
      • eine Suche nach „PHPMailer“ darf nichts finden
    • hier ist aber eine Testbestellung oder ein PW-Vergessen unbedingt trotzdem nötig, da diese Möglichkeit nur überprüft, ob SMTP verwendet wurde und nicht klar stellt, dass der PHPMailer als Fallback verwendet wurde
      • das kann aber ignoriert werden, wenn der Kunde keine wilden Mail-Hoster als dritte im Bunde verwendet, sondern den einfachen Profihost-eigenen SMTP-Server

tl;dr

  • Erste Möglichkeit
    • Kopfzeilen der Email überprüfen
      • Received: muss (E)SMTP enthalten
      • darf kein „X-PHP-Originating-Script“ – Eintrag vorhanden sein
      • X-SpamAssassin am besten im weiten Minusbereich (-19,4 oder ähnlich)
  • Zweite Möglichkeit
    • nach erstellen und öffnen der Datei im browser
    • überprüfen, ob (E)SMTP zu finden ist
    • eine Suche nach PHPMailer darf nichts finden