Автоматизация с помощью Python - как создать автоматизированную систему электронной почты для подачи заявлений о приеме на работу
Все мы получаем рекламные письма от таких компаний, как Swiggy и Amazon, которые предлагают нам ознакомиться с их новыми блюдами или воспользоваться внезапными распродажами.
Вы когда-нибудь задумывались, как им удается отправлять электронные письма миллионам клиентов? Это невозможно сделать вручную! Вместо этого они используют автоматизированные системы электронной почты, чтобы эффективно контролировать и планировать свои письма.
Самое приятное, что такую систему можно быстро создать с помощью пакетов Python с открытым исходным кодом. Предположим, вы студент или работающий специалист, который ищет новую работу. Ручная рассылка резюме и сопроводительного письма нескольким рекрутерам может занять много времени и часто чревата ошибками.
В этой статье я покажу, как автоматизировать отправку заявок на работу с помощью библиотеки Python, шаг за шагом с помощью кода.
Предварительные условия
Прежде чем мы погрузимся в процесс автоматизации почтовых систем с помощью Python, убедитесь, что у вас есть базовые рабочие знания общих концепций Python.
Если вы новичок в Python, вы можете ознакомиться с курсом "Введение в Python" на Hyperskill, где я выступаю в качестве эксперта.
Шаг 1: Настройка подключения к серверу электронной почты
Smtplib - это встроенный пакет Python. Он бесплатный и позволяет отправлять электронные письма через любые сервисы, такие как Gmail, Yahoo и так далее. В этом примере я буду использовать Gmail.
Номер порта зависит от того, какой сервер вы выберете. Мы можем начать соединение с помощью класса smtplib.SMTP
пакета, указав в качестве входных параметров сервер и порт. SMTP расшифровывается как Simple Mail Transfer Protocol (Простой протокол передачи почты).
import smtplib
my_email=’jess_xxx@gmail.com’
password_key=’xxxxx’
# SMTP Server and port no for GMAIL.com
gmail_server= "smtp.gmail.com"
gmail_port= 587
# Starting connection
my_server = smtplib.SMTP(gmail_server, gmail_port)
my_server.ehlo()
my_server.starttls()
# Login with your email and password
my_server.login(my_email, password_key)
Далее, чтобы идентифицировать клиента с сервером, мы вызываем метод ehlo()
или расширенное приветствие. Также очень важно обеспечить безопасность соединения и исключить утечку информации.
Мы можем включить шифрование соединения с помощью Transport Layer Security (TLS), вызвав метод starttls()
. После этого можно использовать метод login()
, указав данные электронной почты и пароля.
Шаг 2: Добавление различных типов содержимого с помощью MIME
Ваше соединение создано! Но прежде чем мы рассмотрим, как отправлять электронные письма списку людей, необходимо понять, как прикреплять к письму различные типы содержимого.
Вы можете отправить письмо непосредственно на SMTP-сервер, если речь идет о текстовом сообщении. Но что делать, если вы хотите добавить ссылку на свой профиль LinkedIn или PDF-файл вашего аттестата или резюме?
Введите команду MIMEMultipart
. Аббревиатура MIME расшифровывается как Multipurpose Internet Mail Extensions (Многоцелевые расширения Интернет-почты). Он также называется Multipart и поддерживает языки обычного текста и HTML. Использование HTML для добавления содержимого обеспечивает гибкость в форматировании и прикреплении изображений.
Модуль MIMEMultipart
предоставляет класс для создания MIME-документов, представляющих многокомпонентное сообщение. Они могут включать текст, изображения и вложения..
Давайте создадим объект MIMEMultipart
с именем message
, как показано ниже. Мы используем подтип alternative
, который включает в себя обычную текстовую и HTML-версию сообщения.
from email.mime.multipart import MIMEMultipart
message = MIMEMultipart("alternative")
Как добавить текстовое содержимое?
Модуль MIMEText
предоставляет класс для создания MIME-документов, представляющих обычный текст в электронном сообщении.
from email.mime.text import MIMEText
text_content= “ Hello, I am a final year student with an Mtech degree in Computer science specializing in Artificial Intelligence. I’m interested in data science roles at your organization.”
message.attach(MIMEText(text))
Как добавить изображения в электронное письмо?
Модуль MIMEImage
предоставляет класс для создания MIME-документов, представляющих данные изображения в электронном сообщении.
Импортируйте модуль MIMEImage
и укажите путь, по которому находится файл изображения. Здесь мы считываем его двоичные данные и присоединяем к объекту сообщения как часть MIMEImage
.
from email.mime.image import MIMEImage
import os
# define your location
grade_card_path = 'path/to/your/grade_card.jpg'
# Read the image from location
grade_card_img = open(grade_card, 'rb').read()
# Attach your image
message.attach(MIMEImage(grade_card_img, name=os.path.basename(grade_card_path)))
Как прикреплять файлы к электронному письму?
Модуль MIMEApplication
предоставляет класс для создания MIME-документов, представляющих произвольные двоичные данные в электронном сообщении. Он часто используется для прикрепления файлов.
Сначала определите путь к файлу вложения (resume_file
), прочитайте его двоичные данные и присоедините его к объекту сообщения как часть MIMEApplication
. При этом в заголовке Content-Disposition
указывается имя файла.
resume_file = '...../resume.txt'
# Read the file from location
with open(resume_file, 'rb') as f:
file = MIMEApplication(
f.read(),
name=os.path.basename(resume_file)
)
file['Content-Disposition'] = f'attachment;
filename="{os.path.basename(resume_file)}"'
message.attach(file)
При прикреплении файлов заменяйте пути, указанные в поле ввода, на реальные. С помощью этой функции можно также прикрепить список файлов.
Шаг 3: Отправка нескольких настраиваемых писем
Надеюсь, вы уже знакомы с тем, как добавлять различные типы контента в электронные письма. Давайте приступим к реализации нашего проекта: автоматизации персональных писем рекрутерам.
При создании системы автоматизации важно настроить ее в соответствии с конкретными потребностями. Например, если вы рекрутер, вы предпочтете письмо, составленное с учетом особенностей вашей компании и вас, а не письмо, в котором к вам обращаются просто как "сэр/мадам".
Для этого в текстовом сообщении нужно создать персонализированные поля, в которые будут вводиться параметры.
Создайте CSV-файл с информацией, которую вы хотите персонализировать, в разных колонках. Например, я создал CSV с именем рекрутера, электронной почтой рекрутера, названием организации и ролью в вакансии.
Сохраните CSV-файл под именем job_contacts.csv
. Убедитесь, что значения разделены запятой и что нет пробелов, чтобы избежать проблем с форматированием. Оформите текстовое сообщение, добавив в него персонализированное содержимое с помощью функции str.format()
. Вы можете использовать фигурные скобки для частей, которые хотите настроить.
Посмотрите на мой пример:
text_content= """
Hello {recruiter_name}, I hope you are doing well. I’m Jane Doe, an engineering graduate with an Mtech in Computer Science and a specialization in Artificial Intelligence.
I am writing to inquire regarding open roles in {job_role} at {organization}. I have experience performing data analysis and modeling through my internships and research projects. I’m excited to have an opportunity to apply my skills and learn more in the {organization_sector}.
I have attached my grade card and résumé below. Looking forward to hearing from you.
Thanks,
…… """
Теперь наступает заключительная часть. Мы считываем CSV-файл и перебираем каждую строку, как показано в приведенном ниже фрагменте. Новые данные о работе считываются и заменяются на каждом шаге сообщения, после чего рекрутеру отправляется электронное письмо.
import csv
with open("job_contacts.csv") as csv_file:
jobs = csv.reader(csv_file)
next(jobs) # Skip header row
for recruiter_name, recruiter_email, organization,
organization_sector,job_role in jobs:
email_text=text_content.format(recruiter_name, recruiter_email
Organziation, organization_sector, job_role)
# Attaching the personalized text to our message
message.attach(MIMEText(email_text))
my_server.sendmail(
from_addr= my_email,
to_addrs=recruiter_email,
msg=message
)
my_server.quit()
Наконец, мы используем функцию SMTP sendmail()
с адресами электронной почты "от кого" и "кому" и сообщениями в качестве входных данных. Не забудьте выйти из сервера по завершении процесса.
Советы и лучшие методы
Надеюсь, вам понравился этот проект. Вы можете использовать этот шаблон для создания автоматизированной системы электронной почты для различных целей, таких как маркетинговые кампании, продвижение вашей рассылки и многое другое.
Вот несколько рекомендаций, которые следует запомнить:
- Не стоит хранить пароль электронной почты в коде. Вместо этого запросите его через ввод или сохраните в переменной окружения.
- Вы можете создать защищенное SMTP-соединение с помощью SSL (Secure Sockets Layer). Это альтернатива TLS, которую мы использовали для обеспечения шифрования на небезопасном соединении.
- Вы можете создать несколько персонализированных электронных сообщений для разных сфер занятости и использовать наиболее подходящее из них с помощью переключения регистров.
Спасибо, что прочитали! Счастливого Вам кодинга!