- Saved searches
- Use saved searches to filter your results more quickly
- License
- un33k/python-emailahoy
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Верификация e-mail по протоколу smtp. Узнаем, что почта есть и ждёт писем при помощи python
- Проверка синтаксиса
- Проверка домена и MX-записи
- Проверка ответа helo
- Готовность принять на конкретный адрес
- Закон о рекламе
- Ссылки
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Checks if an email address is real
License
un33k/python-emailahoy
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
A Python email utility that verifies existence of an email address
A Python email utility that verifies existence of an email address.
1. easy_install python-emailahoy 2. pip install python-emailahoy 3. git clone http://github.com/un33k/python-emailahoy a. cd python-emailahoy b. run python setup.py 4. wget https://github.com/un33k/python-emailahoy/zipball/master a. unzip the downloaded file b. cd into python-emailahoy-* directory c. run python setup.py
Use the class for more control & more granular return status
from emailahoy import VerifyEmail e = VerifyEmail() status = e.verify_email_smtp( email='test@example.com', from_host='mydomain.com', from_email='verify@mydomain.com' ) if e.was_found(status): print >> sys.stderr, "Found:", status elif e.not_found(status): print >> sys.stderr, "Not Found:", status else: print >> sys.stderr, "Unverifiable:", status
Use the shorthand function for quick check
if verify_email_address('test@example.com'): print >> sys.stderr, "Found" else: print >> sys.stderr, "Don't care"
1. Not all email servers will return the correct status 2. Checking an invalid email address returns within 1 second 3. Checking a valid email address returns within 4 seconds or more
To run the tests against the current environment:
Released under a (BSD) license.
Верификация e-mail по протоколу smtp. Узнаем, что почта есть и ждёт писем при помощи python
Пригодится для решения задач по организации рассылок, а также как средство предварительной проверки эл. почты при регистрации.
Это пересказ довольно старой статьи (2015 г) некоего Скотта Бради. Автор предупреждает, что попытка реализовать предложенный подход в промышленных масштабах приведёт вас в списки спамеров, и вообще всё это крайне ненадежно и сомнительно. А реализовано больше с целью познакомиться с процессом, что собственно предлагаю и сделать.
Процесс верификации состоит из 4 частей:
- Проверка синтаксиса
- Проверка домена и MX-записи
- Проверка ответа helo
- И, наконец, server.rcpt (готовность принять на конкретный адрес)
Проверка синтаксиса
По проверке синтаксиса материалов довольно много, можно ознакомиться самостоятельно (1, 2, 3). Скотт предлагает своё выражение, которое тоже вполне рабочее.
import re match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z])$', addressToVerify)
Проверка домена и MX-записи
Пожалуй самое ценное во всём этом материале, это проверка домена и существования на нём маршрутизации электронных писем. Делается при помощи библиотеки dnspython.
import dns.resolver try: records = dns.resolver.resolve("mail.ru", 'MX') mxRecord = records[0].exchange mxRecord = str(mxRecord) except Exception as ex: print(ex)
По опыту использования именно здесь и было большинство ошибок, либо несуществующие домены, либо отсутствие MX-записи. Что автоматически означает бессмысленность попытки отправить почту.
Проверка ответа helo
В то же время существование домена и наличие MX-записи не говорят, о том, что письмо может быть отправлено, с сервером надо вступить в разговор.
import smtplib server = smtplib.SMTP() server.set_debuglevel(0) try: server.connect(mxRecord) code, message = server.helo(host) except Exception as ex: print(ex)
На этом этапе ошибки ловить не приходилось. Если всё хорошо, code будет 250, и ответное сообщение сервера разной степени учтивости. У mail.ru это ‘mxs.mail.ru’, Гугл более приветливый и отвечает:
Тут стоит обратить внимание, что проверка осуществляется без подключения к реальному почтовому серверу (крупные сервисы к этому спокойно относятся, а вот более мелкие корпоративные могут на этом этапе уже резать запрос).
А ещё есть проверка ehlo.
Готовность принять на конкретный адрес
В библиотеке smtplib есть специальный метод SMTP.verify(address), однако прямо в документации обозначено, что многие сервисы его поотключали из-за деятельности спамеров, поэтому предлагается другой способ проверки, существования конкретного ящика, а именно SMTP.rcpt(address).
server.mail('any@mail.box') code, message = server.rcpt(str(addressToVerify))
Это низкоуровневый метод, который идентифицирует конверт получателя. Если всё хорошо, получаем 250 код и сообщение типа:
В этом месте тоже ловится много проблем. Например, mail.ru не стесняется говорить: «Go ahead» при явно несуществующих адресах. Гугл, даёт более содержательные ответы по содержанию конверта.
(550, b»5.1.1 The email account that you tried to reach does not exist. Please try double-checking the recipient’s email address for typos or unnecessary spaces. Learn more at https://support.google.com/mail/?p=NoSuchUser «)
Ещё раз отмечу, что все проверки выполнялись без подключения к реальному почтовому серверу, и в ряде случаев к ящику не пускает спам-асассин, есть ещё множество подводных камней.
Если коротко, то по большому счёту это ручной проход всех этапов отправки письма кроме собственно отправки.
Закон о рекламе
На всякий случай напомню, что рассылки попадают под закон о рекламе и требуется предварительное согласие на её получение. Почтовые сервисы требуют указывать в подобных письмах где было получено согласие на получение и большими буквами надпись «ОТПИСАТЬСЯ».