Domanda

Sto usando la libreria SwiftMailer di PHP per le email Bulk Send (seguenti CANSPAM e RFC).

Tutto funziona bene fino a quando mi imbatto in un dominio che non dispone di una voce corrispondente MX nel DNS. A quel punto, il mio script subito pendente - sto supponendo che sia perché sendmail non è tornato. Questo può durare pochi minuti, o può durare molte ore.

mi hanno confermato che gli indirizzi mio script (barra sendmail) appendere sono quelli senza una voce DNS MX. Tutto il resto manda bene.

C'è un modo per controllare se il DNS MX esiste dentro di PHP, prima tenta di inviare il messaggio? È questo scalabile (vale a dire, sarà che ricerca supplementare sul DNS molto lento me down, o sarà bene b / c allora la MX viene memorizzato nella cache localmente per sendmail per l'uso in consegna il messaggio)?

Grazie per il vostro aiuto

--- --- UPDATE Ho provato le soluzioni qui sotto, che mi ha aiutato a limitare giù qual è il problema. Sembra che non è una questione di se o non esiste la voce MX. Il problema è che il DNS lookup sta prendendo per sempre per tornare. C'è un modo semplice che posso impostare il timeout, quindi se DNS non restituisce in <5s, posso andare avanti?

È stato utile?

Soluzione

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

Si può anche provare questo per evitare il blocco (non ci sono opzioni per regolare il timeout getmxrr):

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

Altri suggerimenti

È possibile utilizzare getmxrr :

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

ricerche DNS scala bene a ripetute richieste. Il server DNS più vicino nella cache i valori guardato per un periodo. Utilizzando un server cache DNS locale può migliorare le prestazioni, ma userà più memoria (un po 'o molto a seconda del software e il numero di indirizzi memorizzati nella cache.

Se non ricordo male le RFC, padroni di casa con un record dovrebbe essere destinazioni email validi pure. Tuttavia, solo i domini con un record non possono avere un server di posta a quell'indirizzo. (Lo stesso vale per gli obiettivi MX, ma questo dovrebbe essere molto meno frequente, e di solito temporanea.)

Servizio di posta elettronica corretto dovrebbe spool l'e-mail e dei tentativi di consegna nel corso del tempo. Se il vostro sendmail non sta facendo questo, allora si dovrebbe verificare la sua configurazione. È inoltre necessario considerare che cosa fare con indirizzi email a cui e-mail non possono essere consegnati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top