Отправка email нескольким адресатам через smtplib в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для организации рассылки электронных писем нескольким получателям в Python применяется библиотека smtplib. Для начала, установите соединение с SMTP-сервером, а затем используйте метод sendmail, передав ему список электронных адресов:

Python
Скопировать код
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-адреса получателей.

Кинга Идем в IT: пошаговый план для смены профессии

Создание пользовательских MIME-типов

Расширьте функционал отправки электронных сообщений, используя MIME-типы для целей более гибкой структуризации содержимого:

Python
Скопировать код
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)

Применяйте соответствующие заголовки для добавления в рассылку скрытых и открытых копий:

Python
Скопировать код
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) для подробного логирования, что значительно облегчит процесс отладки.

Визуализация

Можно представить процесс рассылки писем как радиостанцию, транслирующую ваше сообщение аудитории:

Python
Скопировать код
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(). Сохраняйте логин и пароль конфиденциальными, используя для этого переменные окружения или конфигурационные файлы. Регулярно обновляйте все ваши зависимости.

Python
Скопировать код
import os

username = os.getenv('EMAIL_USERNAME')
password = os.getenv('EMAIL_PASSWORD')

Тестирование массовой рассылки

Перед тем как запускать код, проведите его тестирование, симулируя различные сценарии и предвидя возможные проблемы, связанные с подключением к SMTP и превышением ограничений на отправку. Для осуществления более широкого контроля доставки и применения фильтрации спама используйте сторонние сервисы электронной почты.

Полезные материалы

  1. smtplib — документация Python
  2. Руководство на сайте Real Python по отправке писем через Python
  3. Примеры использования smtplib
  4. GitHub – библиотека SendGrid для Python
  5. Примеры из библиотеки email в документации Python
  6. Руководство по отправке электронных писем с вложениями через Gmail с использованием Python