Я использую библиотеку SwiftMailer PHP для массового отправки писем (следуя CANSPAM и RFC).Sendmail зависает, когда домен MX не существует
Все работает нормально, пока я не перейду через домен, у которого нет соответствующей записи MX в DNS. В этот момент мой скрипт просто зависает - я предполагаю, что это потому, что sendmail не вернулся. Это может продолжаться всего несколько минут, или это может продолжаться много часов.
Я подтвердил, что адреса, которые мой скрипт (косая черта sendmail) зависают, - это те, у которых нет записи DNS MX. Все остальное отправляет штраф.
Есть ли способ проверить, существует ли DNS MX внутри PHP, прежде чем я попытаюсь отправить сообщение? Является ли это масштабируемым (т. Е. Будет ли дополнительный поиск в DNS действительно замедлить меня, или это будет нормально b/c, тогда MX кэшируется локально для sendmail для использования при доставке сообщения)?
Спасибо за вашу помощь
--- UPDATE --- Я попытался ниже решения, которые помогли мне сузить, в чем проблема. Кажется, дело не в том, существует ли запись MX. Проблема в том, что поиск DNS навсегда возвращается. Есть ли простой способ установить таймаут, так что если DNS не вернется в < 5s, я могу двигаться дальше?
спасибо! это помогло; теперь кажется, что проблема не в том, существует ли она или нет, это отставание в возвращении этого значения. Обновленный вопрос выше, любые предложения о том, как сделать этот тайм-аут запроса после 5 секунд? –
См. Мое дополнительное предложение – stillstanding
Так что, не попробуете просто открыть сокет-соединение с доменом электронной почты? Моя проблема в том, что (часто) я отправляю на onedomain.com (который может иметь или не иметь запись A), но MX для two.onedomain.com. Поэтому, когда я открываю сокет, он все равно не будет (точно) сказать мне, нужно ли отправлять это письмо (это говорит мне, что есть запись A для onedomain.com, где я действительно хочу знать [с коротким таймаутом, установленным на поиск MX], если для этого домена есть запись MX). Правильно ли я думаю, что эти два не одно и то же? –