Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Начало
Недавно Google изменил политику по отношению к доступу к аккаунту из неизвестных источников. Давно приходили предупреждения, но я до последнего надеялся, что обойдется и не коснется меня. Наивный.
Докатилось до меня где-то в середине июня. Однажды, смотря логи одного из моих проектов, наткнулся на ошибку авторизации при попытке отправки электронного письма.
Переписывать все под новый протокол или менять домен не очень-то хотелось. Меня же все устраивало. Так что крупные изменения оставил на крайний случай.
Настройки Google аккаунта
Да, решение находится именно здесь. Все просто, хотя я дошел до этого не сразу и именно поэтому пишу эту статью заметку.
Для начала, нужно включить двухфакторную аутентификацию в аккаунте, с которого вы собираетесь отправлять письма. Это важно.
После этого, в Chrome нажимаем на “Manage your Accounts” →Безопасность. Ищем блок “Вход в аккаунт” и нажимаем на “Пароли приложений”.
В выпадашке “Приложение” выбираем “Другое”, вводим имя и, наконец, “Создать”.
В появившемся окне, на желтом фоне будет пароль.
Теперь этот пароль мы и будем использовать для отправки почты с помощью скрипта на вашем любимом языке программирования.
Те, кто уже использует отправку в своих проектах, просто замените пароль в конфигах. А те, кто только собираются — читайте дальше.
Пример на Python
Далее следует простейший скрипт отправки. Я убрал все (отлов исключений, логирование, цикл попыток отправки и т.д.), кроме самой сути.
import smtplib as smtp
login = 'gmail почта, с которой будет производится отправка'
password = 'пароль, который мы получили выше'
server = smtp.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(login, password)
subject = 'какая-нибудь тема письма. может быть пустой'
text = 'основной текст письма. тоже можно оставить пустым'
server.sendmail(login, 'адрес получателя', f'Subject:{subject}\n{text}')
Письма, содержащие кириллицу, не отправятся. Но если очень нужно, то вот:
Hidden text
Просто оберните тему и текст в MIMEText.
import smtplib as smtp
from email.mime.text import MIMEText
from email.header import Header
login = 'gmail почта, с которой будет производится отправка'
password = 'пароль, который мы получили выше'
server = smtp.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(login, password)
subject = 'какая-нибудь тема письма. может быть пустой'
text = 'основной текст письма. тоже можно оставить пустым'
mime = MIMEText(text, 'plain', 'utf-8')
mime['Subject'] = Header(subject, 'utf-8')
server.sendmail(login, 'адрес получателя', mime.as_string())
Заключение
В этой статье заметке был рассмотен способ востановления возможности автоматической отправки электронных писем. И приведен пример скрипта на python.
Буду очень благодарен, если вы в коментариях напишите ваши способы автоматического взаимодействия с электронной почтой. Наверняка, это кому-то очень поможет.
Если кому интересно, вот мой микросервис для отправки сообщений в телеграм бот и по электронной почте.