Question

J'utilise la bibliothèque SwiftMailer de PHP aux e-mails en vrac d'envoi (après CANSPAM et FRCA).

Tout fonctionne bien jusqu'à ce que je lance dans un domaine qui ne dispose pas d'une entrée MX correspondant dans le DNS. À ce moment-là, mon script juste - se bloque Je suppose que c'est parce que sendmail n'a pas retourné. Cela peut durer quelques minutes, ou il peut durer plusieurs heures.

Je confirme que les adresses de mon script (slash sendmail) accrocher sont ceux sans une entrée DNS MX. Tout envoie ailleurs très bien.

Est-il possible que je peux vérifier si le DNS MX existe à l'intérieur de PHP avant de tenter d'envoyer le message? Est-ce évolutive (à savoir, est-ce que recherche supplémentaire sur le DNS vraiment me ralentir, ou il sera bien b / c alors le MX est mis en cache localement pour sendmail à être utilisé pour délivrer le message)?

Merci pour votre aide

--- Mise à jour --- J'ai essayé les solutions ci-dessous, ce qui m'a aidé à affiner ce que le problème est. Il semble que ce n'est pas une question de savoir si l'entrée MX ou non. Le problème est que la recherche DNS prend toujours pour revenir. Y at-il un moyen simple, je peux définir le délai d'attente, donc si DNS ne retourne pas dans <5 secondes, je peux passer à autre chose?

Était-ce utile?

La solution

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

Vous pouvez également essayer d'empêcher le blocage (il n'y a pas d'options pour le réglage de délai d'attente de getmxrr):

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

Autres conseils

Vous pouvez utiliser getmxrr :

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

recherche DNS échelle bien sur les demandes répétées. Le plus proche serveur DNS cache les valeurs contemplé pour une période. Utilisation d'un serveur de cache DNS local peut améliorer les performances, mais utilisera plus de mémoire (un peu ou beaucoup selon le logiciel et le nombre d'adresses mises en cache.

Si je me souviens RFCs correctement, les hôtes avec un enregistrement A doit être des destinations e-mail valides ainsi. Cependant, les domaines avec seulement un enregistrement A ne peuvent pas avoir un serveur de messagerie à cette adresse. (La même chose vaut pour les objectifs MX, mais cela devrait être beaucoup moins fréquentes et généralement temporaire.)

services de messagerie appropriés devraient spool l'e-mail et la livraison au fil du temps nouvelle tentative. Si votre sendmail ne le fait pas, alors vous devriez vérifier sa configuration. Vous aurez également besoin d'examiner ce qu'il faut faire avec les adresses e-mail auxquelles email ne peut pas être livré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top