Python — отправка электронной почты с использованием SMTP
Предыдущая страницаСледующая страница
Простой протокол передачи почты (SMTP) — это протокол, который обрабатывает отправку электронной почты и маршрутизацию электронной почты между почтовыми серверами.
Python предоставляет smtplib модуль, который определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой интернет-компьютер с помощью демона прослушивателя SMTP или ESMTP.
Вот простой синтаксис для создания одного SMTP-объекта, который впоследствии можно использовать для отправки электронной почты —
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Вот подробная информация о параметрах —
-
хост − Это хост, на котором работает ваш SMTP-сервер. Вы можете указать IP-адрес хоста или доменное имя, например tutorialspoint.com. Это необязательный аргумент.
-
порт − Если вы предоставляете хост аргумент, то вам нужно указать порт, где SMTP-сервер слушает. Обычно это порт 25.
-
локальное_имя_хоста − Если ваш SMTP-сервер работает на вашем локальном компьютере, вы можете указать просто localhost начиная с этой опции.
Объект SMTP имеет метод экземпляра с именем sendmail. , который обычно используется для отправки сообщения по почте. Он принимает три параметра —
-
отправитель − Строка с адресом отправителя.
-
получатели − Список строк, по одной для каждого получателя.
-
сообщение − Сообщение в виде строки, отформатированной в соответствии с различными документами RFC.
Пример
Вот простой способ отправить одно электронное письмо с помощью скрипта 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"
Здесь вы разместили основное электронное письмо в сообщении, используя тройные кавычки, позаботившись о правильном форматировании заголовков. Электронное письмо требует От , Кому и Тема заголовок, отделяемый от тела сообщения пустой строкой.
Для отправки почты вы используете 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 <[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. заголовок в составной/смешанный . Затем можно указать разделы текста и вложений в границах. .
Граница начинается с двух дефисов, за которыми следует уникальный номер, который не может появляться в части сообщения электронной почты. Конечная граница, обозначающая последний раздел электронного письма, также должна заканчиваться двумя дефисами.
Прикрепленные файлы должны быть закодированы с помощью 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"
Python
- Типы данных Python
- Операторы Python
- Оператор передачи Python
- Аргументы функции Python
- Словарь Питона
- Обработка исключений Python с использованием оператора try, exclude и finally
- Библиотека Python датчика температуры TMP006 с использованием Raspberry pi,
- Датчик температуры Python и Raspberry Pi
- Среднее значение Python:как найти СРЕДНЕЕ значение списка в Python
- Поменять местами две переменные Python, не используя третью