В этом уроке я расскажу о сценарии, который использую для отправки электронных писем пользователям приложений, которые я создаю, и многому другому.
Что мы будем делать?
Мы создадим простую программу Python, которая будет делать следующее:
- Используйте созданный нами файл шаблона для дизайна электронного письма. Это будет просто текстовый файл со значениями-заполнителями.
- Получите имя и адрес электронной почты человека из другого текстового файла, который мы создаем.
Эти моменты делают эту программу намного ближе к реальному использованию отправки электронных писем в ваших приложениях. Давайте начнем.
Файл для писем
Файл, содержащий электронные письма для пользователей, будет выглядеть так:
Шубхам Шубхам.код @ gmail.комЭто простой текстовый файл, содержащий имя пользователя и адрес электронной почты, разделенные пробелом. Несколько писем были помещены с данными каждого пользователя в новую строку. Мы назвали этот файл пользователи.текст.
Использование шаблона
Давайте также быстро определим шаблон, который мы будем использовать в нашем скрипте для замены значений:
Здравствуйте, $ PERSON_NAME,Мы отправили это письмо с помощью модуля Python smtplib. Круто, верно?
Желаю яркого дня впереди!
Ваше здоровье
Мы использовали строку шаблона $ PERSON_NAME которое будет заменено именем человека, которое мы получим от пользователей.txt при отправке электронного письма.
Получение пользовательских данных из файла
Первым шагом к отправке электронной почты пользователю является определение того, куда мы хотим отправить электронные письма. Давайте напишем функцию Python, которая будет принимать имя файла и возвращать нам имена пользователей и идентификаторы электронной почты, на которые необходимо отправить электронные письма:
def get_users_data (имя_файла):user_name = []
user_email = []
с open (file_name, mode = 'r', encoding = 'utf-8') как user_file:
для user_info в user_file:
имя пользователя.добавить (user_info.split () [0])
user_email.добавить (user_info.split () [1])
вернуть user_name, user_email
С помощью этой функции мы просто возвращаем имена пользователей и адреса электронной почты, которые получаем из файла.
Получение объекта шаблона
Теперь мы можем проанализировать наш шаблон и получить объект шаблона из созданного нами текстового файла:
def read_template (имя_файла):с open (file_name, 'r', encoding = 'utf-8') как msg_template:
msg_template_content = msg_template.читать()
шаблон возврата (msg_template_content)
При этом мы вернем объект Template, который мы можем использовать для анализа содержимого файла и выполнения необходимых замен для строк шаблона, таких как имя пользователя.
Как происходит отправка электронной почты?
Теперь, когда мы готовы с дизайном шаблона и данными пользователя, нам нужно понять, как электронное письмо на самом деле отправляется пользователю:
- Создайте SMTP-соединение с учетными данными для входа в учетную запись отправителя
- Создайте заголовок, состоящий из нескольких частей, с информацией с полями From, To и Subject
- Создайте тело сообщения, которое нужно отправить
- Отправить электронное письмо с объектом подключения SMTP
Настройка SMTP-соединения
Давайте наконец определим функцию, которая будет отправлять электронное письмо указанным пользователям. Вот функция:
def main ():user_name, user_email = get_users_data ('пользователи.txt ') # читать данные пользователя
message_template = read_template ('сообщение.текст')
# настраиваем SMTP-сервер
smtplib_server = smtplib.SMTP (хост = 'smtp.Gmail.com ', порт = 587)
smtplib_server.starttls ()
smtplib_server.войти (SEND_FROM, EMAIL_PWD)
# Получите подробную информацию о каждом пользователе и отправьте электронное письмо:
для имени, адрес электронной почты в zip (имя_пользователя, адрес_пользователя):
multipart_message = MIMEMultipart () # создать сообщение
# добавить настоящее имя человека в шаблон сообщения
msg = шаблон_сообщения.заменить (PERSON_NAME = имя.заглавие())
# Распечатывает тело сообщения ради нас
печать (сообщение)
# настраиваем параметры сообщения
multipart_message ['От'] = SEND_FROM
multipart_message ['Кому'] = электронная почта
multipart_message ['Subject'] = "LinuxHint Email"
# добавить в тело сообщения
multipart_message.прикрепить (MIMEText (msg, 'plain'))
# отправляем сообщение через настроенный ранее сервер.
smtplib_server.send_message (multipart_message)
дель multipart_message
# Завершить сеанс SMTP и закрыть соединение
smtplib_server.покидать()
В приведенной выше функции мы следовали каждому шагу, указанному в предыдущем разделе. Мы создали SMTP-соединение и использовали его для отправки электронной почты.
Полная программа
В последнем разделе давайте посмотрим на полную программу, которую можно использовать для отправки электронного письма указанному пользователю:
импортировать smtplibиз шаблона импорта строки
из электронной почты.мим.multipart import MIMEMultipart
из электронной почты.мим.текст импорт MIMEText
SEND_FROM = 'мой-адрес электронной почты'
EMAIL_PWD = 'мой-пароль-здесь'
def get_users_data (имя_файла):
user_name = []
user_email = []
с open (file_name, mode = 'r', encoding = 'utf-8') как user_file:
для user_info в user_file:
имя пользователя.добавить (user_info.split () [0])
user_email.добавить (user_info.split () [1])
вернуть user_name, user_email
def read_template (имя_файла):
с open (file_name, 'r', encoding = 'utf-8') как msg_template:
msg_template_content = msg_template.читать()
шаблон возврата (msg_template_content)
def main ():
user_name, user_email = get_users_data ('пользователи.txt ') # читать данные пользователя
message_template = read_template ('сообщение.текст')
# настраиваем SMTP-сервер
smtplib_server = smtplib.SMTP (хост = 'smtp.Gmail.com ', порт = 587)
smtplib_server.starttls ()
smtplib_server.войти (SEND_FROM, EMAIL_PWD)
# Получите подробную информацию о каждом пользователе и отправьте электронное письмо:
для имени, адрес электронной почты в zip-архиве (имя_пользователя, адрес_пользователя):
multipart_message = MIMEMultipart () # создать сообщение
# добавить настоящее имя человека в шаблон сообщения
msg = шаблон_сообщения.заменить (PERSON_NAME = имя.заглавие())
# Распечатывает тело сообщения ради нас
печать (сообщение)
# настраиваем параметры сообщения
multipart_message ['От'] = SEND_FROM
multipart_message ['Кому'] = электронная почта
multipart_message ['Subject'] = "LinuxHint Email"
# добавить в тело сообщения
multipart_message.прикрепить (MIMEText (msg, 'plain'))
# отправляем сообщение через настроенный ранее сервер.
smtplib_server.send_message (multipart_message)
дель multipart_message
# Завершить сеанс SMTP и закрыть соединение
smtplib_server.покидать()
если __name__ == '__main__':
основной()
Когда мы запускаем эту программу с идентификатором Gmail, вы можете столкнуться с такой проблемой:
Ошибка SMTP Gmail
Это связано с тем, что Gmail не позволяет простым скриптам использовать Gmail API. Для этого вам, возможно, придется отключить безопасный вход в вашу учетную запись Gmail. О том, как это сделать для Gmail, читайте здесь.
Заключение
В этом уроке мы рассмотрели, как мы можем отправлять электронные письма с помощью Python smtplib модуль.