Отправка email нескольким адресатам через smtplib в Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для организации рассылки электронных писем нескольким получателям в Python применяется библиотека smtplib
. Для начала, установите соединение с SMTP-сервером, а затем используйте метод sendmail
, передав ему список электронных адресов:
import smtplib
# Параметры для создания подключения к SMTP-серверу
smtp_server = "smtp.example.com"
port = 587
username = "username"
password = "password"
# Содержимое письма
subject = "Тема"
body = "Текст письма"
message = f"Subject: {subject}\n\n{body}"
# Список получателей письма
recipients = ["email1@example.com", "email2@example.com"]
# Функция отправки письма
with smtplib.SMTP(smtp_server, port) as server:
server.starttls()
server.login(username, password)
server.sendmail(username, recipients, message)
При этом не забудьте заменить значения переменных на свои собственные данные для авторизации и указать нужные email-адреса получателей.
Создание пользовательских MIME-типов
Расширьте функционал отправки электронных сообщений, используя MIME-типы для целей более гибкой структуризации содержимого:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['From'] = 'sender@example.com'
msg['To'] = ', '.join(recipients)
msg['Subject'] = 'Тема письма'
text_body = MIMEText('Текст сообщения', 'plain')
msg.attach(text_body)
full_message = msg.as_string()
server.sendmail(msg['From'], recipients, full_message)
Учтите, что msg['To']
должно содержать строку адресов, где каждый из них отделен запятой, тогда как sendmail
ожидает вместо этого список адресатов.
Дополнительные адресаты: скрытая и открытая копии (Cc и Bcc)
Применяйте соответствующие заголовки для добавления в рассылку скрытых и открытых копий:
cc = ['cc1@example.com', 'cc2@example.com']
bcc = ['bcc1@example.com', 'bcc2@example.com']
msg['Cc'] = ', '.join(cc)
msg['Bcc'] = ', '.join(bcc)
all_recipients = recipients + cc + bcc
server.sendmail(msg['From'], all_recipients, full_message)
Предотвращение ошибок
Для обработки исключений используйте блоки try
и except
и воспользуйтесь server.set_debuglevel(1)
для подробного логирования, что значительно облегчит процесс отладки.
Визуализация
Можно представить процесс рассылки писем как радиостанцию, транслирующую ваше сообщение аудитории:
import smtplib
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login('you@example.com', 'password')
recipients = ['listener1@example.com', 'listener2@example.com', 'listener3@example.com']
server.sendmail('you@example.com', recipients, 'Содержимое вашего письма')
server.quit()
📡
Трансляция сообщения: 💌 ➡️ [📻, 📱, 💻]
# Каждый получатель настроен на вашу "Волну"
Приоритет безопасности
Неозбываемое значение имеет безопасность использования Transport Layer Security (TLS). Непременно применяйте server.starttls()
. Сохраняйте логин и пароль конфиденциальными, используя для этого переменные окружения или конфигурационные файлы. Регулярно обновляйте все ваши зависимости.
import os
username = os.getenv('EMAIL_USERNAME')
password = os.getenv('EMAIL_PASSWORD')
Тестирование массовой рассылки
Перед тем как запускать код, проведите его тестирование, симулируя различные сценарии и предвидя возможные проблемы, связанные с подключением к SMTP и превышением ограничений на отправку. Для осуществления более широкого контроля доставки и применения фильтрации спама используйте сторонние сервисы электронной почты.