Python - отправка электронной почты с использованием SMTP
Simple Mail Transfer Protocol (SMTP) - это протокол, который обрабатывает отправку электронной почты и ее маршрутизацию между почтовыми серверами.
Python предоставляет smtplib модуль, который определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой компьютер в Интернете с помощью демона прослушивателя SMTP или ESMTP.
Вот простой синтаксис для создания одного объекта SMTP, который позже можно использовать для отправки электронной почты:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Вот подробная информация о параметрах -
host- Это хост, на котором запущен ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например, tutorialspoint.com. Это необязательный аргумент.
port- Если вы указываете аргумент host , то вам нужно указать порт, на котором SMTP-сервер слушает. Обычно это порт 25.
local_hostname- Если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать только localhost в этой опции.
У объекта SMTP есть метод экземпляра, называемый sendmail, который обычно используется для отправки сообщения по почте. Требуется три параметра -
Отправитель - строка с адресом отправителя.
В Приемники - список А строк, один для каждого получателя.
Сообщение - сообщение в виде строки , отформатированной как указано в различном РЛКЕ.
пример
Вот простой способ отправить одно электронное письмо с помощью скрипта Python. Попробуй один раз -
#!/usr/bin/python
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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"
Здесь вы поместили базовое электронное письмо в сообщение, используя тройную кавычку, заботясь о правильном форматировании заголовков. Электронная почта требуетFrom, To, и Subject заголовок, отделенный от тела письма пустой строкой.
Чтобы отправить почту, вы используете smtpObj для подключения к SMTP-серверу на локальном компьютере, а затем используете метод sendmail вместе с сообщением, адресом отправителя и адресом назначения в качестве параметров (даже если адреса отправителя и получателя находятся внутри e -mail, они не всегда используются для маршрутизации почты).
Если вы не используете 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 <[email protected]>
To: To Person <[email protected]>
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. Затем можно указать разделы текста и вложений вboundaries.
Граница начинается с двух дефисов, за которыми следует уникальный номер, который не может появиться в части сообщения электронной почты. Последняя граница, обозначающая последний раздел электронного письма, также должна заканчиваться двумя дефисами.
Прикрепленные файлы должны быть закодированы с помощью pack("m") функция должна иметь кодировку base64 перед передачей.
пример
Ниже приведен пример отправки файла /tmp/test.txtв виде вложения. Попробуй один раз -
#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
# Define the message action
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
# Define the attachment section
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, reciever, message)
print "Successfully sent email"
except Exception:
print "Error: unable to send email"