Вопрос

Я использую библиотеку SWIFTMailer PHP, чтобы насыпнуть отправлять электронные письма (после Canspam и RFC).

Все работает нормально, пока не бегу через домен, который не имеет соответствующей записи MX в DNS. В этот момент мой сценарий просто висит - я предполагаю, что это потому, что SendMail не вернулся. Это может длиться всего несколько минут, или он может длиться много часов.

Я подтвердил, что адреса мои скрипт (Sensh SendMail) зависают, являются те, кто без ввода DNS MX. Все остальное отправляет нормально.

Есть ли способ проверить, существует ли DNS MX внутри PHP, прежде чем пытаться отправить сообщение? Это масштабируемое (т.е. будет ли этот дополнительный поиск на DNS действительно замедляет меня вниз, или будет точным b / c, то mx локально кэшируется для sendmail, чтобы использовать при доставке сообщения)?

Спасибо за вашу помощь

--- Обновите --- Я попробовал решения ниже, что помогло мне сузить то, что проблема. Кажется, это не вопрос о том, существует ли вход MX. Проблема в том, что поиск DNS принимает навсегда, чтобы вернуться. Есть ли простой способ установить время ожидания, поэтому, если DNS не возвращается в <5, я могу двигаться дальше?

Это было полезно?

Решение

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

Вы также можете попробовать это, чтобы предотвратить блокировку (нет вариантов регулировки getmxrr Тайм-аут):

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

Другие советы

Вы можете использовать getmxrr.:

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

ДНС находятся в масштабе шкала на повторных запросах. Ближайший DNS-сервер будет кэшировать значения воспроизведения в течение периода. Использование локального сервера Cache DNS может улучшить производительность, но будет использовать больше памяти (немного или много или много в зависимости от программного обеспечения и количества кэшированных адресов.

Если я правильно помню RFC, хосты с записью должны быть достоверные адресаты по электронной почте. Однако домены только с записью не могут иметь почтовый сервер по этому адресу. (То же самое относится к целям MX, но это должно быть гораздо реже, и обычно временным.)

Правильные электронные почтовые услуги должны со временем катушка электронной почты и повторной доставки. Если ваш SENDMAIL не делает это, то вы должны проверить его конфигурацию. Вам также нужно будет рассмотреть, что делать с адресами электронной почты, на которую электронное письмо не может быть доставлено.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top