Надсилайте електронні листи за допомогою Python

В якості навчальної вправи я нещодавно заглибився в Python 3, щоб побачити, як я можу запустити купу електронних листів. Можливо, існують більш прямі способи зробити це у виробничому середовищі, але наступні для мене добре працювали.

Отже, ось сценарій: у вас є імена та адреси електронної пошти групи контактів. І ви хочете надіслати повідомлення кожному з цих контактів, додавши вгорі повідомлення “Шановне [ім’я]” .

Для простоти ви можете зберігати контактні дані у файлі, а не в базі даних. Ви також можете зберегти шаблон повідомлення, яке ви бажаєте надіслати, у файл.

Модуль smtplib Python - це в основному все, що потрібно для надсилання простих електронних листів, без будь-якої теми або такої додаткової інформації. Але для справжньої електронної пошти вам потрібен рядок теми та багато інформації - можливо, навіть фотографії та вкладення.

Тут з’являється пакет електронної пошти Python. Майте на увазі, що неможливо надіслати повідомлення електронної пошти, використовуючи лише emailпакет. Вам потрібна комбінація обох emailі smtplib.

Обов’язково ознайомтесь із вичерпною офіційною документацією до них обох.

Ось чотири основних етапи надсилання електронних листів за допомогою Python:

  1. Налаштуйте SMTP-сервер і увійдіть до свого облікового запису.
  2. Створення MIMEMultipartоб'єкта повідомлення і завантажити його з відповідними заголовками для From, Toі Subjectполе.
  3. Додайте тіло повідомлення.
  4. Надішліть повідомлення за допомогою об'єкта SMTP-сервера.

А тепер дозвольте мені провести вас через весь процес.

Скажімо, у вас є файл контактів mycontacts.txtнаступним чином:

[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]

Кожна лінія являє собою один контакт. У нас є ім’я, за яким йде електронна адреса. Я зберігаю все малими літерами. Залишаю логікою програмування перетворення будь-яких полів у верхній регістр або регістр речень, якщо це необхідно. Все це досить просто в Python.

Далі ми маємо файл шаблону повідомлення message.txt.

[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly

Помітили слово “ ${PERSON_NAME}”? Це рядок шаблону в Python. Рядки шаблону можна легко замінити іншими рядками; у цьому прикладі ${PERSON_NAME}збирається замінити справжнім іменем людини, як ви скоро побачите.

Тепер почнемо з коду Python. Спочатку нам потрібно прочитати контакти з mycontacts.txtфайлу. Ми могли б також узагальнити цей біт на власну функцію.

Функція get_contacts()бере як аргумент ім’я файлу. Він відкриє файл, прочитає кожен рядок (тобто кожен контакт), розділить його на ім’я та електронну адресу, а потім додасть їх у два окремі списки. Нарешті, два списки повертаються з функції.

Нам також потрібна функція для читання у файлі шаблону (наприклад message.txt) та повернення Templateоб’єкта, зробленого з його вмісту.

Як і попередня функція, ця бере як аргумент ім'я файлу.

Щоб надіслати електронне повідомлення, вам потрібно скористатися SMTP (Simple Mail Transfer Protocol). Як вже згадувалося раніше, Python надає бібліотеки для вирішення цього завдання.

У наведеному вище фрагменті коду ви імпортуєте, smtplibа потім створюєте екземпляр SMTP, який інкапсулює з'єднання SMTP. В якості параметра приймається адреса хоста та номер порту, що цілком залежить від налаштувань SMPT вашого конкретного постачальника послуг електронної пошти. Наприклад, у випадку з Outlook, рядок 4 вище буде замість цього:

s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)

Ви повинні використовувати адресу хосту та номер порту конкретного постачальника послуг електронної пошти, щоб все це працювало.

MY_ADDRESSі PASSWORDвище - дві змінні, що містять повну адресу електронної пошти та пароль облікового запису, який ви збираєтесь використовувати.

Зараз був би вдалий час отримати контактну інформацію та шаблони повідомлень, використовуючи функції, які ми визначили вище.

names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')

Тепер для кожного з цих контактів давайте надсилати пошту окремо.

Для кожного nameі email(з файлу контактів), ви створюєте об'єкт MIMEMultipart, настройка From, To, Subjectконтент типу заголовків в якості ключового слова словника, а потім приєднавши тіло повідомлення в MIMEMultipartоб'єкт в вигляді звичайного тексту. Можливо, ви захочете прочитати документацію, щоб дізнатись більше про інші типи MIME, з якими можна експериментувати.

Також зверніть увагу, що у рядку 10 вище я замінюю ${PERSON_NAME}фактичне ім’я, витягнуте з файлу контактів за допомогою механізму шаблонування в Python.

У цьому конкретному прикладі я видаляю MIMEMultipartоб'єкт і відтворюю його кожного разу, коли ви перебираєте цикл.

Після цього ви можете надіслати повідомлення за допомогою зручної функції send_message () об'єкта SMTP, який ви створили раніше.

Ось повний код:

Ось так! Я вважаю, що код тепер досить зрозумілий.

Не соромтеся копіювати та налаштовувати його за необхідності.

Окрім офіційних документів Python, я також хотів би згадати цей ресурс, який мені дуже допоміг.

Щасливого кодування :)

Я спочатку опублікував цю статтю тут. Якщо вам сподобалась ця стаття, будь ласка, натисніть на маленьке серце нижче. Дякую!