Python: проверить, если записи MX доменного имени имеют активные входящие. Проверьте записи mx, подтвердите адрес электронной почты

Мне нужно проверить наличие входящей почты, связанной с записями MX, найденными в зоне DNS / записи доменного имени. После того, как я получу все MX с dns.resolver.query(domain, 'MX') Затем я сортирую на основе приоритета и зацикливаюсь на следующей функции и проверяю их одну за другой, чтобы убедиться, что они активны. После того, как я получил все MX, я передаю их check_mailbox() по одному. mx_record переменная со значением MX exmp. mx.something.com. И mail переменная, второй параметр, это реальная электронная почта, которую я тестирую.

моя текущая функция:

def check_mailbox(mx_record, mail):
    code = ""

    try:
        server = smtplib.SMTP(timeout=300)
        server.set_debuglevel(0)  # 1 for all data show
        server.connect(mx_record['mx'])  # Starting the communication 
        server.helo(server.local_hostname)
        server.mail("from@address.sample")
        code, message = server.rcpt(str(mail))  # Test the mailbox
        server.quit()
    except Exception as e:
        print(str(e))
        code = "error"
    finally:
        if code == 250 or code == 251:
            return {'code': code, 'message': message}
        else:
            return False

В моей текущей функции, как я уже сказал, я тестирую индивидуально все MX. Конечно, в зависимости от сети это может иметь некоторые задержки.

  • Мне нужно знать, есть ли более быстрый способ выполнить эту проверку?
  • Есть ли другой (совершенно другой) способ, которым я могу выполнить эту проверку?
  • Было бы лучше, если бы я не делал server.quit() после каждой проверки
    но открыть его, оставить открытым и закрыть после того, как все проверки сделаны?

заранее спасибо.


любую дополнительную информацию вам нужно просто спросите меня. Перед тем, как перейти к этому этапу, у меня должна быть логика:run () -> check (email) -> validator () -> checkEmailStructure () -> checkDomainAlive () -> checkHasMXs () -> loop to oder - > цикл с check_mailbox()

таким образом я проверяю, если структура плохая, заканчивайте проверку. Если домен является тупиковой валидацией. И только если структура в порядке, домен в порядке и имеет MX, то цикл проверяется. Также в последнем цикле, если один из MX возвращает 250 или 251, я прекращаю тестирование, потому что хотя бы один работает! Я заказываю с точки зрения приоритета.

любые предложения приветствуются!

1 ответ

Мне нужно знать, есть ли более быстрый способ выполнить эту проверку?

Некоторые почтовые серверы позволяют отправлять сразу все команды (helo, mail, rect, quit) перед ожиданием каждого ответа. Однако только некоторые почтовые серверы поддерживают это, и в любом случае это обычно быстрые почтовые серверы (например, Google), поэтому особой пользы от этого нет.

Есть ли другой (совершенно другой) способ выполнить эту проверку?

Нет, что я знаю. Некоторые почтовые серверы имеют vrfyкоманда, но большинство этого не делает.

Было бы лучше, если бы я не выполнял server.quit() после каждой проверки, а открывал его, оставлял открытым и закрывал после завершения всех проверок?

Да, это значительно ускорило бы работу. Возможно, вам придется использовать RSETкоманда между проверками, хотя не уверен.

Стоит также отметить, что даже если rcptКоманда выполнена успешно, нет гарантии, что адрес электронной почты работает. Например, Yahoo/Verizon/AOL не будет выдавать ошибку до тех пор, пока dataкоманду например.

Другие вопросы по тегам