Python - Отправка электронной почты

Здравствуйте, мечтатели о программировании на Python! Сегодня мы отправимся в захватывающее путешествие в мир отправки электронной почты с помощью Python. Как ваш дружелюбный сосед-учитель компьютеров, я рад вести вас через этот процесс. Поверьте мне, к концу этого урока вы будете отправлять письма как профи!

Python - Sending Email

Отправка электронной почты в Python

Начнем с основ. Отправка электронной почты в Python похожа на работу цифрового почтальона, только вместо ходьбы от двери до двери мы используем специальную библиотеку Python под названием smtplib. SMTP означает Simple Mail Transfer Protocol, что просто значит "правила для отправки почты через интернет".

Вот простой пример для начала:

import smtplib

sender_email = "ваш[email protected]"
receiver_email = "получатель@example.com"
password = "ваш пароль"
message = "Привет, это тестовое письмо из Python!"

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

Разберем это:

  1. Мы импортируем библиотеку smtplib.
  2. Мы настраиваем наш email отправителя, получателя и пароль.
  3. Мы создаем простое сообщение.
  4. Мы подключаемся к SMTP-серверу Gmail (об этом позже).
  5. Мы запускаем TLS для безопасности.
  6. Мы входим в наш аккаунт электронной почты.
  7. Наконец, мы отправляем письмо!

Функция Python smtplib.SMTP()

Функция SMTP() является ключом к нашему цифровому почтовому отделению. Она устанавливает соединение с SMTP-сервером, который мы хотим использовать. Вот более детальный просмотр:

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())

В этом примере:

  • Мы создаем объект SMTP для сервера Gmail.
  • ehlo() похоже на то, чтобы сказать серверу "привет".
  • starttls() начинает шифрование TLS для безопасности.

Модуль Python smtpd

Хотя smtplib используется для отправки почты, smtpd используется для ее получения. Это как настройка вашего собственного мини-сервера электронной почты! Вот простой пример:

import asyncore
from smtpd import SMTPServer

class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Получение сообщения от: {peer}')
print(f'Сообщение адресовано от: {mailfrom}')
print(f'Сообщение адресовано к: {rcpttos}')
print(f'Длина сообщения: {len(data)}')

server = EmailServer(('localhost', 1025), None)
asyncore.loop()

Этот код настраивает базовый сервер электронной почты, который выводит информацию о полученных письмах. Это как иметь ваше собственное персональное отделение сортировки почты!

Отправка HTML-письма с помощью Python

Теперь сделаем наши письма более интересными с некоторым HTML:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "ваш[email protected]"
receiver_email = "получатель@example.com"
password = "ваш пароль"

message = MIMEMultipart("alternative")
message["Subject"] = "тест многочастотности"
message["From"] = sender_email
message["To"] = receiver_email

text = "Привет! Это простое текстовое письмо."
html = """\
<html>
<body>
<p>Привет!<br>
Это <b>HTML</b> письмо.
</p>
</body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

Этот пример отправляет письмо как с текстовой, так и с HTML-версией. Это как отправка письма с фантастической конвертом!

Отправка вложений как электронной почты

Что если мы хотим отправить файл вместе с нашим письмом? Нет проблем! Вот как это сделать:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

sender_email = "ваш[email protected]"
receiver_email = "получатель@example.com"
password = "ваш пароль"

message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Письмо с вложением"

body = "Это письмо с вложением."
message.attach(MIMEText(body, "plain"))

filename = "document.pdf"  # Замените на имя вашего файла
attachment = open(filename, "rb")

part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

message.attach(part)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

Этот скрипт прикрепляет файл к вашему письму. Это как добавление пакета к вашему письму!

Отправка электронной почты с использованием SMTP-сервера Gmail

На протяжении этого урока мы использовали SMTP-сервер Gmail. Вот быстрый справочник для общих SMTP-серверов:

Провайдер электронной почты SMTP-сервер Порт
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

Помните, что при использовании Gmail вам может потребоваться включить "Доступ к менее безопасным приложениям" или использовать "Пароль приложения", если у вас включена двухфакторная аутентификация.

Итак, вот и все, друзья! Теперь вы обладаете возможностью отправлять письма как профи на Python. Помните, с большой силой приходит большая ответственность - используйте свои новые навыки отправки почты мудро! Счастливого кодирования, и чтобы ваши письма всегда доходили до адресата!

Credits: Image by storyset