Простой протокол передачи почты (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 имеет метод экземпляра, называемый sendmail, который обычно используется для работы по почте сообщение. Требуется три параметра –
Отправитель – строка с адресом отправителя.
Приемники – список строк, один для каждого получателя.
Сообщение – сообщение в качестве строки, отформатированной, как указано в различных RFC.
Пример здесь – простой способ отправить одно электронное письмо с помощью сценария Python. Попробуйте это один раз –
#!/usr/bin/python import smtplib sender = 'from@fromdomain.com' receivers = ['to@todomain.com'] message = """From: From PersonTo: 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 SMTPException: print "Error: unable to send email"
Здесь вы поместили основную электронную почту в сообщении, используя Triple Quote, ухожу на правильность форматирования заголовков. Электронная почта требует заголовка от, до и темы, отделенного от тела электронной почты с пустой строкой.
Чтобы отправить почту, вы используете SMTPOBJ для подключения к SMTP-серверу на локальном компьютере, а затем используйте метод SendMail вместе с сообщением, из адреса, а также адреса назначения в качестве параметров (даже если из и для адресов находятся внутри -Мал, они не всегда используются для маршрутизации почты).
Если вы не используете SMTP-сервер на локальной машине, вы можете использовать клиент SMTPLIB для связи с удаленным SMTP-сервером. Если вы не используете услугу веб-почты (например, Hotmail или Yahoo! Почта), ваш поставщик электронной почты должен был придать вам данные обходящего почтового сервера, которые вы можете поставить их, как следует –
smtplib.SMTP('mail.your-domain.com', 25)
Отправка HTML Email с помощью Python Когда вы отправляете текстовое сообщение с помощью Python, то все содержимое рассматриваются как простой текст. Даже если вы включите теги HTML в текстовом сообщении, он отображается как простые теги текста и HTML не будут отформатированы в соответствии с синтаксисом HTML. Но Python предоставляет возможность отправить HTML-сообщение в качестве фактического HTML-сообщения.
При отправке сообщения электронной почты вы можете указать версию MIME, тип контента и набор символов для отправки HTML E-mail.
Пример
Ниже приведен пример для отправки HTML Content в качестве электронной почты. Попробуйте это один раз –
#!/usr/bin/python import smtplib message = """From: From PersonTo: 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 SMTPException: print "Error: unable to send email"
Отправка вложений как электронная почта Для отправки электронной почты со смешанным контентом требуется установить заголовок типа Content в MultiArp/Misser. Тогда текстовые и секции вложения могут быть указаны в границах.
Граница запускается с двух дефисов, за которыми следуют уникальный номер, который не может появиться в сообщении частью электронной почты. Окончательная граница, обозначающая окончательный раздел электронной почты, также должен закончиться двумя дефисами.
Прикрепленные файлы должны быть закодированы с функцией 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 = 'webmaster@tutorialpoint.com' reciever = 'amrood.admin@gmail.com' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From PersonTo: To Person 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"
Оригинал: “https://dev.to/rebelx127001/sending-mails-with-python-9e0”