Raspberry Pi: отправка электронной почты с помощью Python (SMTP-сервер)

В этом руководстве вы узнаете, как отправить электронное письмо с вашего Raspberry Pi, используя Python-скрипт и SMTP-серверы. Пример, который мы покажем, также можно запустить на любом другом устройстве, на котором работает Python.

Raspberry Pi — Как отправить электронное письмо с помощью Python и SMTP-сервера

Вам также может быть интересно прочитать: :doc:`Raspberry Pi: обнаружение движения с уведомлениями по электронной почте (Python) </raspberry/rnt/raspberry-pi-motion-email-python/index>`_.

Предварительные требования

Перед продолжением этого руководства проверьте следующие предварительные требования.

  1. Ознакомьтесь с платой Raspberry Pi — если вы не знакомы с Raspberry Pi, вы можете прочитать наше :doc:`руководство по началу работы с Raspberry Pi здесь </raspberry/rnt/getting-started-with-raspberry-pi/index>`_.

  2. Вы должны знать, как запускать и создавать файлы Python на вашем Raspberry Pi. Нам нравится программировать наш Raspberry Pi через SSH, используя расширение в VS Code. У нас есть подробное руководство по этой теме: :doc:`Программирование Raspberry Pi удалённо с помощью VS Code (Remote-SSH) </raspberry/rnt/raspberry-pi-remote-ssh-vs-code/index>`_.

Введение в SMTP-серверы

SMTP означает Simple Mail Transfer Protocol (Простой протокол передачи почты), и это интернет-стандарт для передачи электронной почты. Вы можете легко отправлять электронные письма с помощью Python-скрипта на вашем Raspberry Pi, используя библиотеку smtplib. Эта библиотека определяет объект клиентского сеанса SMTP, который можно использовать для отправки писем. Узнайте больше здесь.

Настройки SMTP-сервера

Для отправки электронных писем с помощью Python-скрипта на вашем Raspberry Pi вам нужен адрес электронной почты отправителя, и вам потребуется знать настройки SMTP-сервера вашей почты. Ниже вы найдёте настройки для наиболее популярных почтовых провайдеров.

Настройки SMTP-сервера Gmail

Если вы используете учётную запись Gmail, вот данные SMTP-сервера:

  • SMTP-сервер: smtp.gmail.com

  • Имя пользователя SMTP: Полный адрес Gmail

  • Пароль SMTP: Ваш пароль Gmail

  • Порт SMTP (TLS): 587

  • Порт SMTP (SSL): 465

  • Требуется SMTP TLS/SSL: да

Настройки SMTP-сервера Outlook

Для учётных записей Outlook настройки SMTP-сервера следующие:

  • SMTP-сервер: smtp.office365.com

  • Имя пользователя SMTP: Полный адрес электронной почты Outlook

  • Пароль SMTP: Ваш пароль Outlook

  • Порт SMTP: 587

  • Требуется SMTP TLS/SSL: Да

Настройки SMTP-сервера Live или Hotmail

Для учётных записей Live или Hotmail настройки SMTP-сервера следующие:

  • SMTP-сервер: smtp.live.com

  • Имя пользователя SMTP: Полный адрес электронной почты Live/Hotmail

  • Пароль SMTP: Ваш пароль Windows Live Hotmail

  • Порт SMTP: 587

  • Требуется SMTP TLS/SSL: Да

Если вы используете другого почтового провайдера, вам нужно найти его настройки SMTP-сервера — вы легко найдёте их с помощью быстрого поиска в Google.

Электронная почта отправителя (новая учётная запись)

Мы рекомендуем создать новую учётную запись электронной почты для отправки писем на ваш основной личный адрес электронной почты. Не используйте вашу основную личную электронную почту для отправки писем через Python-скрипт. Если что-то пойдёт не так в вашем коде или если по ошибке вы сделаете слишком много запросов, ваша учётная запись может быть заблокирована или временно отключена.

Мы будем использовать только что созданную учётную запись Gmail.com для отправки писем, но вы можете использовать любого другого почтового провайдера. Электронная почта получателя может быть вашей личной почтой без каких-либо проблем.

Создание учётной записи электронной почты отправителя

Создайте новую учётную запись электронной почты для отправки писем с ESP32/ESP8266. Если вы хотите использовать учётную запись Gmail, перейдите по этой ссылке, чтобы создать новую.

Gmail — Создание новой учётной записи

Создание пароля приложения

Вам нужно создать пароль приложения, чтобы RPi мог отправлять электронные письма, используя вашу учётную запись Gmail. Пароль приложения — это 16-значный код, который даёт менее безопасному приложению или устройству разрешение на доступ к вашей учётной записи Google. Узнайте больше о входе с паролями приложений здесь.

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

  1. Откройте вашу учётную запись Google.

  2. В панели навигации выберите Безопасность.

  3. В разделе «Вход в Google» выберите Двухэтапная аутентификация > Начать.

  4. Следуйте инструкциям на экране.

После включения двухэтапной аутентификации вы можете создать пароль приложения.

  1. Откройте вашу учётную запись Google.

  2. В панели поиска найдите Пароли приложений.

  3. Откройте меню Пароли приложений.

Учётная запись Google — создание пароля приложения для отправки email с ESP32
  1. Дайте ему имя, например Raspberry Pi. Затем нажмите Создать.

Google — Создание пароля приложения для Raspberry Pi

Появится окно с паролем, который вы будете использовать с Raspberry Pi для отправки электронных писем. Сохраните этот пароль (даже если написано, что вам не нужно его запоминать), потому что он понадобится вам позже.

Сгенерированный пароль приложения учётной записи Google

Теперь у вас должен быть пароль приложения, который вы можете использовать в вашем Python-скрипте для отправки электронных писем.

Если вы используете другого почтового провайдера, проверьте, как создать пароль приложения. Вы сможете найти инструкции с помощью быстрого поиска в Google «ваш_почтовый_провайдер + создать пароль приложения».

Скрипт для отправки электронной почты

Создайте новый файл Python с именем send_email.py и скопируйте следующий код.

Вам нужно вставить данные вашей электронной почты отправителя и адрес электронной почты получателя.

# Complete Project Details: https://RandomNerdTutorials.com/raspberry-pi-send-email-python-smtp-server/

import smtplib
from email.message import EmailMessage

#Set the sender email and password and recipient emaiç
from_email_addr ="REPLACE_WITH_THE_SENDER_EMAIL"
from_email_pass ="REPLACE_WITH_THE_SENDER_EMAIL_APP_PASSWORD"
to_email_addr ="REPLACE_WITH_THE_RECIPIENT_EMAIL"

# Create a message object
msg = EmailMessage()

# Set the email body
body ="Hello from Raspberry Pi"
msg.set_content(body)

# Set sender and recipient
msg['From'] = from_email_addr
msg['To'] = to_email_addr

# Set your email subject
msg['Subject'] = 'TEST EMAIL'

# Connecting to server and sending email
# Edit the following line with your provider's SMTP server details
server = smtplib.SMTP('smtp.gmail.com', 587)

# Comment out the next line if your email provider doesn't use TLS
server.starttls()
# Login to the SMTP server
server.login(from_email_addr, from_email_pass)

# Send the message
server.send_message(msg)

print('Email sent')

#Disconnect from the Server
server.quit()

Просмотреть исходный код

Как работает код

Продолжайте читать, чтобы узнать, как работает код и какие изменения вам нужно внести в скрипт, чтобы он заработал у вас.

Вы начинаете с импорта библиотек, необходимых для SMTP и функций, связанных с электронной почтой: smtplib и класс EmailMessage из модуля email.message.

import smtplib
from email.message import EmailMessage

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

#Set the sender email and password and recipient emaiç
from_email_addr ="REPLACE_WITH_THE_SENDER_EMAIL"
from_email_pass ="REPLACE_WITH_THE_SENDER_EMAIL_APP_PASSWORD"
to_email_addr ="REPLACE_WITH_THE_RECIPIENT_EMAIL"

Создайте объект EmailMessage() с именем msg, который будет управлять свойствами электронного сообщения.

# Create a message object
msg = EmailMessage()

Установите тело электронного письма в следующих строках. Вы можете изменить его на любой текст, который хотите.

# Set the email body
body ="Hello from Raspberry Pi"
msg.set_content(body)

Затем мы устанавливаем отправителя и получателя в свойствах электронного сообщения.

msg['From'] = from_email_addr
msg['To'] = to_email_addr

Следующая строка устанавливает тему электронного письма, вы можете изменить её на что угодно.

msg['Subject'] = 'TEST EMAIL'

Затем вы устанавливаете связь с SMTP-сервером. Передайте адрес SMTP-сервера провайдера в виде строки в качестве первого аргумента в smtplib.SMTP(), а порт в виде целого числа — в качестве второго аргумента.

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

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

Функция server.starttls() необходима для почтовых провайдеров, которые используют TLS для шифрования сообщений (а это практически все почтовые провайдеры). Если ваш почтовый провайдер не использует TLS, вы можете удалить или закомментировать эту строку.

server.starttls()

Далее скрипт входит в учётную запись электронной почты отправителя и отправляет письмо.

# Send the message
server.send_message(msg)

Наконец, мы прекращаем связь с сервером.

server.quit()

Демонстрация

Сохраните ваш файл Python. Затем запустите его на вашем Raspberry Pi. Выполните следующую команду в директории вашего файла проекта (используйте имя вашего файла):

python send_email.py

После запуска скрипта вы должны получить электронное письмо от Raspberry Pi на вашу учётную запись электронной почты.

Получение электронного письма от Raspberry Pi Электронное письмо получено от Raspberry Pi

Заключение

В этом руководстве вы узнали, как отправить электронное письмо с Raspberry Pi, используя Python-скрипт. Этот пример также совместим с другими платами/устройствами, поддерживающими Python 3.

Вам также может быть интересно посмотреть следующее руководство, которое показывает, как отправлять уведомления по электронной почте при обнаружении движения:

У нас есть другие руководства, показывающие, как отправлять электронные письма с использованием различных плат:

Хотите узнать больше о Raspberry Pi? Посмотрите наши проекты: