Frage

Ich bin mit PHP Swiftmailer Bibliothek Bulk-E-Mails senden (nach CANSPAM und RFCs).

Alles funktioniert gut, bis ich auf einer Domäne ausführen, die keinen entsprechenden MX-Eintrag im DNS haben. An diesem Punkt mein Skript gerade hängt - ich nehme an, es ist, weil Sendmail nicht zurückgekehrt ist. Dies kann nur ein paar Minuten dauern, oder es kann viele Stunden dauern.

Ich habe bestätigt, dass die Adressen mein Skript (slash Sendmail) hängen sind diejenigen ohne DNS-MX-Eintrag. Alles andere sendet in Ordnung.

Gibt es eine Möglichkeit kann ich überprüfen, ob die DNS MX innerhalb von PHP vorhanden ist, bevor ich die Nachricht zu senden versuchen? Ist das skalierbare (das heißt, wird diese zusätzliche Lookup auf dem DNS verlangsamt mich wirklich nach unten, oder wird es in Ordnung sein b / c dann wird die MX lokal für Sendmail Verwendung zwischengespeichert die Nachricht bei der Bereitstellung)?

Danke für Ihre Hilfe

--- UPDATE --- Ich versuchte, die Lösungen unten, die mir geholfen, zu verengen, was das Problem ist. Es scheint, es ist nicht eine Frage, ob der MX-Eintrag vorhanden ist. Das Problem ist, dass die DNS-Lookup für immer zurückfindet. Gibt es eine einfache Weise, die ich das Timeout einstellen, so dass, wenn DNS nicht in <5s zurückkehrt, bewege ich mich kann?

War es hilfreich?

Lösung

getmxrr(substr($email,strrpos($email,'@')+1),$hosts);
if (!$hosts)
    echo 'No MX record found';

Sie können auch versuchen, diese Blockade zu vermeiden (es gibt keine Optionen zum Einstellen getmxrr Timeout):

if (!@fsockopen(substr($email,strrpos($email,'@')+1),25,$errno,$errstr,5))
    echo 'No MX record found';

Andere Tipps

Sie können mit getmxrr :

if (getmxrr($hostname, $mxhosts)) {
   // MX record exists
   var_dump($mxhosts);
}

DNS-Lookups skaliert gut auf wiederholte Anfragen. Der nächste DNS-Server die nachgeschlagen Werte für einen Zeitraum zwischenzuspeichern. einen lokalen DNS-Cache-Server unter Verwendung von Leistung verbessern kann, aber mehr Speicher (ein wenig oder viel abhängig von der Software und die Anzahl der Adressen im Cache verwenden.

Wenn ich die RFCs richtig, Hosts mit einem A-Datensatz erinnern sollten gültige E-Mail Ziele als gut. Jedoch Domänen mit nur einem Ein Datensatz kann nicht einen Mail-Server zu dieser Adresse. (Gleiches gilt für MX-Ziele, aber dies sollte viel weniger häufig und in der Regel zeitlich begrenzt sein.)

Die richtigen E-Mail-Dienste sollten die E-Mail und Wiederholungs Lieferung im Laufe der Zeit spulen. Wenn Ihre Sendmail wird dies nicht tun, dann sollten Sie die Konfiguration überprüfen. Sie werden auch berücksichtigen müssen, was mit E-Mail-Adressen zu tun, an die E-Mail nicht zugestellt werden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top