Учебники

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

Простой протокол передачи почты (SMTP) — это протокол, который обрабатывает отправку электронной почты и маршрутизацию электронной почты между почтовыми серверами.

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

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

import smtplib

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

Вот детали параметров —

  • хост — это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.

  • порт — если вы предоставляете аргумент хоста , вам нужно указать порт, который прослушивает SMTP-сервер. Обычно этот порт будет 25.

  • local_hostname — если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost из этой опции.

хост — это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.

порт — если вы предоставляете аргумент хоста , вам нужно указать порт, который прослушивает SMTP-сервер. Обычно этот порт будет 25.

local_hostname — если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost из этой опции.

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

  • Отправитель — строка с адресом отправителя.

  • Получатели — список строк, по одной для каждого получателя.

  • Сообщение — сообщение в виде строки, отформатированной так, как указано в различных RFC.

Отправитель — строка с адресом отправителя.

Получатели — список строк, по одной для каждого получателя.

Сообщение — сообщение в виде строки, отформатированной так, как указано в различных RFC.

пример

Вот простой способ отправить одно электронное письмо, используя скрипт Python. Попробуйте один раз —

#!/usr/bin/python

import smtplib

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

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
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 SMTPException:
   print "Error: unable to send email"

Здесь вы разместили в сообщении основную электронную почту, используя тройную кавычку, стараясь правильно отформатировать заголовки. Для электронного письма требуются заголовки « От» , « Кому» и « Тема» , отделенные от тела письма пустой строкой.

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

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

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

Отправка электронной почты в формате HTML с использованием Python

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

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

пример

Ниже приведен пример отправки содержимого HTML в виде электронного письма. Попробуйте один раз —

#!/usr/bin/python

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
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

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

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

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

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

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

Прикрепленные файлы должны быть закодированы с помощью функции pack («m»), чтобы кодирование base64 перед передачей.

пример

Ниже приведен пример, который отправляет файл /tmp/test.txt в качестве вложения. Попробуйте один раз —