Изпращайте имейли с помощта на 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, бих искал да спомена и този ресурс, който ми помогна много.

Приятно кодиране :)

Първоначално публикувах тази статия тук. Ако тази статия ви е харесала, моля, натиснете малкото сърце по-долу. Благодаря!