Python - Отправка электронной почты
Здравствуйте, мечтатели о программировании на Python! Сегодня мы отправимся в захватывающее путешествие в мир отправки электронной почты с помощью Python. Как ваш дружелюбный сосед-учитель компьютеров, я рад вести вас через этот процесс. Поверьте мне, к концу этого урока вы будете отправлять письма как профи!
Отправка электронной почты в 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)
Разберем это:
- Мы импортируем библиотеку
smtplib
. - Мы настраиваем наш email отправителя, получателя и пароль.
- Мы создаем простое сообщение.
- Мы подключаемся к SMTP-серверу Gmail (об этом позже).
- Мы запускаем TLS для безопасности.
- Мы входим в наш аккаунт электронной почты.
- Наконец, мы отправляем письмо!
Функция 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