Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Отправка email в Python через SMTP: простое и быстрое руководство

Введение в SMTP

Simple Mail Transfer Protocol (SMTP) — протокол для отправки и маршрутизации электронной почты между почтовыми серверами.

Python предоставляет модуль smtplib, определяющий объект сессии SMTP-клиента, который можно использовать для отправки почты на любой компьютер в Интернете с SMTP или ESMTP демоном-слушателем.

Создание SMTP-объекта

import smtplib
smtpObj = smtplib.SMTP([host[, port[, local_hostname]]])

Параметры:

Метод sendmail

У объекта SMTP есть метод экземпляра sendmail, обычно используемый для отправки сообщения. Принимает три параметра:

Пример: отправка простого email

#!/usr/bin/python
import smtplib

sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person 
To: To Person 
Subject: SMTP e-mail test

This is a test e-mail message.
"""

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message)
    print("Successfully sent email")
except smtplib.SMTPException:
    print("Error: unable to send email")

Здесь базовое email-сообщение помещено в message с использованием тройных кавычек, с правильным форматированием заголовков. Email требует заголовки From, To и Subject, отделенные от тела пустой строкой.

Для отправки используется smtpObj для подключения к SMTP-серверу на локальной машине, затем метод sendmail с сообщением, адресом отправителя и адресом назначения (даже если from и to внутри письма, они не всегда используются для маршрутизации).

Если у вас нет SMTP-сервера на локальной машине, можно использовать smtplib для связи с удаленным SMTP-сервером. Если вы не используете веб-почту (Hotmail, Yahoo! Mail), ваш провайдер должен предоставить детали исходящего почтового сервера:

smtplib.SMTP('mail.your-domain.com', 25)

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

При отправке текстового сообщения через Python всё содержимое рассматривается как простой текст. Даже если включить HTML-теги в текстовое сообщение, оно отобразится как обычный текст, и теги не будут отформатированы по HTML-синтаксису. Но Python позволяет отправить HTML-сообщение как настоящее HTML.

При отправке можно указать MIME-версию, тип содержимого и кодировку символов для отправки HTML-email.

Пример: HTML-email

#!/usr/bin/python
import smtplib

message = """From: From Person 
To: To Person 
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format
This is HTML message.

This is headline.

""" try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print("Successfully sent email") except smtplib.SMTPException: print("Error: unable to send email")

Отправка вложений как email

Для отправки email со смешанным содержимым нужно установить заголовок Content-type в multipart/mixed. Затем текстовые и вложенные разделы можно указать внутри границ (boundaries).

Граница начинается с двух дефисов и уникального номера, который не может появиться в теле сообщения. Финальная граница, обозначающая последнюю секцию email, также должна заканчиваться двумя дефисами.

Прикрепленные файлы должны быть закодированы функцией pack("m") для base64-кодирования перед передачей.

Пример: отправка файла как вложения

#!/usr/bin/python
import smtplib
import base64

filename = "/tmp/test.txt"
# Чтение файла и кодирование в base64
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent)

sender = 'webmaster@tutorialpoint.com'
receiver = 'amrood.admin@gmail.com'
marker = "AUNIQUEMARKER"

body = """This is a test email to send an attachment."""

# Основные заголовки
part1 = """From: From Person 
To: To Person 
Subject: Sending Attachment
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

# Текстовая часть
part2 = """Content-Type: text/plain
Content-Transfer-Encoding: 8bit

%s
--%s
""" % (body, marker)

# Секция вложения
part3 = """Content-Type: multipart/mixed; name="%s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" % (filename, filename, encodedcontent, marker)

message = part1 + part2 + part3

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receiver, message)
    print("Successfully sent email")
except Exception:
    print("Error: unable to send email")

Python

  1. Освоение типов данных в Python: практическое руководство
  2. Мастерство операторов Python: Полное руководство
  3. Оператор pass в Python: практическое руководство
  4. Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
  5. Словари в Python: создание, манипуляции и продвинутые техники
  6. Обработка исключений в Python: try, except, else и finally подробно
  7. ИК-датчик температуры TMP006 с Raspberry Pi: библиотека Python и руководство по настройке
  8. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  9. Вычисление среднего значения в Python: практическое руководство
  10. Легкая перемена двух Python-переменных без временной переменной