Как отправить сообщение на почту python
Перейти к содержимому

Как отправить сообщение на почту python

  • автор:

Отправка писем в Python с помощью SMTP

В этом руководстве вы познакомитесь с SMTP, модулем Python, используемым для отправки почты. Также будет продемонстрировано, как отправлять различные типы электронных писем, такие как простые текстовые электронные письма, электронные письма с вложениями и электронные письма с содержимым HTML.

Введение в SMTP

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

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

Вот как создать объект SMTP.

import smtplib 
server = smtplib.SMTP(host='host_address',port=your_port) 

Создаём и отправляем простое электронное письмо

Следующий скрипт позволит вам отправить электронное письмо через SMTP-сервер Gmail. Тем не менее, Google не разрешит вход через smtplib , поскольку этот тип входа помечен как «менее безопасный». Чтобы решить эту проблему, перейдите на страницу https://www.google.com/settings/security/lesssecureapps, когда вы вошли в свою учетную запись Google, и «Разрешить менее безопасные приложения». Смотрите скриншот ниже.

Create and Send a Simple Email

Мы выполним следующие шаги для выполнения этого процесса:

  • Создайте объект SMTP для подключения к серверу.
  • Войдите в свою учетную запись.
  • Определите заголовки сообщений и учетные данные для входа.
  • Создайте объект сообщения MIMEMultipart и присоедините к нему соответствующие заголовки, т. е. From, To и Subject.
  • Прикрепить сообщение к сообщению MIMEMultipart объекта.
  • Наконец, отправьте сообщение.

Этот процесс очень прост, как показано ниже.

# import necessary packages 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
import smtplib 
# create message object instance 
msg = MIMEMultipart() 
message = "Thank you" 
# setup the parameters of the message 
password = "your_password" 
msg['From'] = "your_address" 
msg['To'] = "to_address" 
msg['Subject'] = "Subscription" 
# add in the message body 
msg.attach(MIMEText(message, 'plain')) 
#create server 
server = smtplib.SMTP('smtp.gmail.com: 587') 
server.starttls() 
# Login Credentials for sending the mail 
server.login(msg['From'], password) 
# send the message via the server. 
server.sendmail(msg['From'], msg['To'], msg.as_string()) 
server.quit() 
print "successfully sent email to %s:" % (msg['To']) 

Обратите внимание, что адреса «Кому» и «От» должны быть явно включены в заголовки сообщения.

Создаём и отправляем электронное письмо с приложением

В этом примере мы собираемся отправить электронное письмо с вложенным изображением. Процесс аналогичен отправке простого текстового электронного письма.

  • Создайте объект SMTP для подключения к серверу.
  • Войдите в свою учетную запись.
  • Определите заголовки сообщений и учетные данные для входа.
  • Создайте объект сообщения MIMEMultipart и присоедините к нему соответствующие заголовки, т. е. From, To и Subject.
  • Прочитайте и приложите изображение к сообщению объекта MIMEMultipart .
  • Наконец, отправьте сообщение.
# send_attachment.py 
# import necessary packages 
from email.mime.multipart import MIMEMultipart 
from email.MIMEImage import MIMEImage 
from email.mime.text import MIMEText 
import smtplib 
# create message object instance 
msg = MIMEMultipart() 
# setup the parameters of the message 
password = "your_password" 
msg['From'] = "your_address" 
msg['To'] = "to_address" 
msg['Subject'] = "Photos" 
# attach image to message body 
msg.attach(MIMEImage(file("google.jpg").read())) 
# create server 
server = smtplib.SMTP('smtp.gmail.com: 587') 
server.starttls() 
# Login Credentials for sending the mail 
server.login(msg['From'], password) 
# send the message via the server. 
server.sendmail(msg['From'], msg['To'], msg.as_string()) 
server.quit() 
print "successfully sent email to %s:" % (msg['To']) 

Класс MIMEImage является подклассом MIMENonMultipart , который используется для создания объектов сообщений MIME типов изображений. Другие доступные классы включают
MIMEMessage и MIMEAudio .

Создание и отправка сообщений электронной почты в формате HTML

Первое, что мы собираемся сделать, это создать шаблон электронной почты в формате HTML.

Создать шаблон HTML

Вот код HTML для шаблона, и он содержит два столбца таблицы, каждый с изображением и содержимым предварительного просмотра. Если вы предпочитаете готовое профессиональное решение, воспользуйтесь нашими лучшими почтовыми шаблонами. У нас есть несколько адаптивных опций с легко настраиваемыми функциями, с которых можно начать.

 Tutsplus Email Newsletter 
 type="text/css"> 
a color: #d80a3e;> 
body, #header h1, #header h2, p margin: 0; padding: 0;> 
#main border: 1px solid #cfcece;> 
img display: block;> 
#top-message p, #bottom p color: #3f4042; font-size: 12px; font-family: Arial, Helvetica, sans-serif; > 
#header h1 color: #ffffff !important; font-family: "Lucida Grande", sans-serif; font-size: 24px; margin-bottom: 0!important; padding-bottom: 0; > 
#header p color: #ffffff !important; font-family: "Lucida Grande", "Lucida Sans", "Lucida Sans Unicode", sans-serif; font-size: 12px; > 
h5 margin: 0 0 0.8em 0;> 
h5 font-size: 18px; color: #444444 !important; font-family: Arial, Helvetica, sans-serif; > 
p font-size: 12px; color: #444444 !important; font-family: "Lucida Grande", "Lucida Sans", "Lucida Sans Unicode", sans-serif; line-height: 1.5;> 

width=«100%» cellpadding=«0» cellspacing=«0» bgcolor=«e4e4e4»>

 id="top-message" cellpadding="20" cellspacing="0" width="600" align="center"> 
 align="center"> 

href="#">View in Browser

 id="main" width="600" align="center" cellpadding="0" cellspacing="15" bgcolor="ffffff"> 
 id="header" cellpadding="10" cellspacing="0" align="center" bgcolor="8fb3e9"> 
 width="570" align="center" bgcolor="#d80a3e"> Evanto Limited  
 width="570" align="right" bgcolor="#d80a3e"> November 2017  
 id="content-3" cellpadding="0" cellspacing="0" align="center"> 
 width="250" valign="top" bgcolor="d0d0d0" style="padding:5px;"> 
 src="https://thumbsplus.tutsplus.com/uploads/users/30/posts/29520/preview_image/pre.png" width="250" height="150" /> 
 width="15"> 
 width="250" valign="top" bgcolor="d0d0d0" style="padding:5px;"> 
 src="https://cms-assets.tutsplus.com/uploads/users/30/posts/29642/preview_image/vue-2.png" width ="250" height="150" /> 
 id="content-4" cellpadding="0" cellspacing="0" align="center"> 
 width="200" valign="top"> 
 How to Get Up and Running With Vue 
 In the introductory post for this series we spoke a little about how web designers can benefit by using Vue. In this tutorial we’ll learn how to get Vue up.. 
 width="15"> 
 width="200" valign="top"> 
 Introducing Haiku: Design and Create Motion 
 With motion on the rise amongst web developers so too are the tools that help to streamline its creation. Haiku is a stand-alone.. 
 id="bottom" cellpadding="20" cellspacing="0" width="600" align="center"> 
 align="center"> 
 Design better experiences for web & mobile 

href="#">Unsubscribe | href="#">Tweet | href="#">View in Browser

Шаблон будет выглядеть примерно так:

The HTML Template

Ниже приведен скрипт для отправки электронного письма с HTML-контентом. Содержимое шаблона будет нашим почтовым сообщением.

import smtplib 
import email.message 
server = smtplib.SMTP('smtp.gmail.com:587') 
email_content = """ 
 Tutsplus Email Newsletter  
 body, #header h1, #header h2, p
 #main
 #top-message p, #bottom p
 #header h1
 #header p
 

Evanto Limited

 

November 2017

   
   
 
How to Get Up and Running With Vue
 

In the introductory post for this series we spoke a little about how web designers can benefit by using Vue. In this tutorial we will learn how to get Vue up..

 
Introducing Haiku: Design and Create Motion
 

With motion on the rise amongst web developers so too are the tools that help to streamline its creation. Haiku is a stand-alone..

 

Design better experiences for web & mobile

 

Unsubscribe | Tweet | View in Browser

msg = email.message.Message() 
msg['Subject'] = 'Tutsplus Newsletter' 
msg['From'] = 'youraddress' 
msg['To'] = 'to_address' 
password = "yourpassword" 
msg.add_header('Content-Type', 'text/html') 
msg.set_payload(email_content) 
s = smtplib.SMTP('smtp.gmail.com: 587') 
s.starttls() 
# Login Credentials for sending the mail 
s.login(msg['From'], password) 
s.sendmail(msg['From'], [msg['To']], msg.as_string()) 

Выполните ваш код, и если ошибки не возникнет, значит, письмо успешно отправлено. Теперь перейдите в папку «Входящие», и вы должны увидеть своё электронное письмо в виде HTML-контента, красиво отформатированного.

Formatted HTML email

Заключение

Этот учебник охватывает большую часть того, что необходимо для отправки электронных писем для вашего приложения. Для отправки электронной почты доступно несколько API, поэтому вам не нужно начинать с нуля, например, SendGrid, но также важно понимать основы. Для получения дополнительной информации посетите документацию Python.

Кроме того, не стесняйтесь посмотреть, что у нас есть для продажи и для обучения на Envato Market, и, пожалуйста, задавайте любые вопросы и оставляйте ценные отзывы, используя канал ниже.

Как отправить письмо с помощью SMTPlib

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

По итогу этого туториала вы сможете правильно оформить своё письмо и отправить его по почте.

1. Оформите письмо с помощью заголовков

Чтобы отправить письмо, ваша программа должна связаться с сервером почтового сервиса (Gmail, Yandex, Mail.ru и т.д.) и передать ему всю нужную информацию: кому, от кого, что в письме. Протокол устанавливает правила, как должно выглядеть такое сообщение:

From: Адрес отправителя To: Адрес получателя Subject: Заголовок письма Content-Type: text/plain; charset="UTF-8"; Начало вашего текста . 

Например, если нужно отправить письмо Привет! с адреса mymail@gmail.com на адрес friend@gmail.com с заголовком Важно! , сообщение должно выглядеть так:

From: mymail@gmail.com To: friend@gmail.com Subject: Важно! Content-Type: text/plain; charset="UTF-8"; Привет! 

2. Закодируйте письмо

Русский язык не поддерживается в протоколе SMTP, поэтому письмо надо предварительно закодировать в UTF-8 . Вот как это делается:

letter = """\ From: mymail@gmail.com To: friend@gmail.com Subject: Важно! Content-Type: text/plain; charset="UTF-8"; Привет!""" letter = letter.encode("UTF-8") print(letter) 

Вот что выведет этот код:

b'From: mymail@gmail.com\nTo: friend@gmail.com\nSubject: \xd0\x92\xd0\xb0\xd0\xb6\xd0\xbd\xd0\xbe!\nContent-Type: text/plain; charset="UTF-8";\n\n\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!' 

3. Подключитесь к почтовому сервису

С письмом понятно, но как же передать всё это серверу? Чтобы с ним общаться, нужно знать его адрес. Почтовые сайты сами публикуют адреса своих SMTP серверов.

Адреса для нескольких популярных сервисов:

Сайт Адрес сервера
Яндекс.Почта smtp.yandex.ru:465
GMail smtp.gmail.com:465
Mail.ru smtp.mail.ru:465

Для примера возьмём Gmail. В первую очередь свяжемся с сервером:

import smtplib server = smtplib.SMTP_SSL('smtp.gmail.com:465') 

Затем зайдём в свой почтовый ящик. Для этого передайте методу .login() свои логин и пароль:

import smtplib server = smtplib.SMTP_SSL('smtp.gmail.com:465') server.login(login, password) 

4. Отправьте письмо

Теперь, когда письмо закодировано, его можно наконец-то отправить. Метод .sendmail() ждёт от вас 3 значения: от кого, кому и что передать. Да, вы уже указали это в письме, но придётся указать второй раз:

import smtplib server = smtplib.SMTP_SSL('smtp.gmail.com:465') server.login(login, password) server.sendmail(email_from, email_to, message) server.quit() 

Обратите внимание, что в конце мы прощаемся с сервером методом .quit() , чтобы он больше не ждал от нас писем. Это правило хорошего тона. Соблюдать его не обязательно, но бездушной машине будет приятно.

Бонус: если хочется отправить письмо через Gmail

При запуске кода вы можете получить ошибку SSL такого вида:

smtplib ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131) 

Проблема связана с устаревшей версией протокола шифрования SSL. Чинится ошибка добавлением ещё нескольких строк кода с явным указанием номера версии. Подробно проблема обсуждается на StackOverflow.

... server = smtplib.SMTP('smtp.gmail.com:587') import ssl # переместите в шапку файла context = ssl.SSLContext(ssl.PROTOCOL_TLS) server.ehlo() server.starttls(context=context) server.ehlo() ... 

При запуске код либо заработает, либо вывалится ошибка с кодом 535-5.7.8 :

SMTPAuthenticationError 535-5.7.8 Username and Password not accepted 

Эта ошибка связана с настройками безопасности на Gmail. Зайдите из-под своего аккаунта на страницу Ненадежные приложения и разрешите доступ “Небезопасным приложениям”. Подробно проблема обсуждается на StackOverlfow.

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Как отправить письмо на почту с помощью Python?

Подскажите, понадобилось на python отправлять сообщение на почту yandex.
Нашел код, но вылетает ошибка.
Почитал, написано что ошибка может вылетать, так как пароль может быть не в кодировке utf-8.
Пишу в коде для password, addr_from, addr_to это: encode(encoding=’utf-8′) — ноль эмоций.
Подскажите, как тогда исправить ошибку?

import smtplib # Импортируем библиотеку по работе с SMTP # Добавляем необходимые подклассы - MIME-типы from email.mime.multipart import MIMEMultipart # Многокомпонентный объект from email.mime.text import MIMEText # Текст/HTML addr_from = "[email protected]" addr_to = "[email protected]" password = "pass" # пароль от почты addr_from msg = MIMEMultipart() # Создаем сообщение msg['From'] = addr_from # Адресат msg['To'] = addr_to # Получатель msg['Subject'] = 'Тема сообщения' # Тема сообщения body = "Текст сообщения" msg.attach(MIMEText(body, 'plain')) # Добавляем в сообщение текст server = smtplib.SMTP_SSL('smtp.yandex.ru', 465) # Создаем объект SMTP # server.starttls() # Начинаем шифрованный обмен по TLS server.login(addr_from, password) # Получаем доступ server.send_message(msg) # Отправляем сообщение server.quit() # Выходим 
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Error: authentication failed: This user does not have access rights to this service') 

Python: Как отправить письмо на электронную почту с вложением

Рано или поздно практически у каждого разработчика возникает задача отправки электронной почты. Часто это связано с необходимостью информирования получателя о наступлении какого-нибудь события.

Материалы данной статьи используются в статье о камере для Raspberry Pi 3, в разделе о построении простой системы безопасности, суть которой заключается в отправке фотографии пользователю по электронке, при детектировании движения в зоне действия датчика.

Для отправки письма по электронной почте используется штатная, предустановленная в системе, библиотека smtplib :

import smtplib

Для получения справки о любом импортированном классе или библиотеке, в интерпретаторе Python, после непосредственно импорта, нужно выполнить команду:

>>> import smtplib >>> help (smtplib)

Или из скетча — вывод в консоль через функцию print() :
import smtplib print ( help (smtplib))

  • Gmail — https://support.google.com/mail/answer/7126229?hl=ru
  • Mail.ru — https://help.mail.ru/mail-help/mailer/popsmtp
  • Yandex — https://yandex.ru/support/mail-new/mail-clients.html

Для упрощения работы с письмами понадобится пакет email . Он позволяет работать с сообщениями электронной почты как с отдельными объектами. Пакет содержит также подклассы, описывающие различные MIME-типы. Для работы понадобятся 2 из них — MIMEMultipart и MIMEText :

import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText

Общий шаблон отправки сообщения выглядит так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

import smtplib # Импортируем библиотеку по работе с SMTP # Добавляем необходимые подклассы — MIME-типы from email.mime.multipart import MIMEMultipart # Многокомпонентный объект from email.mime.text import MIMEText # Текст/HTML from email.mime.image import MIMEImage # Изображения addr_from = «from_address@mail.com» # Адресат addr_to = «to_address@mail.com» # Получатель password = «pass» # Пароль msg = MIMEMultipart() # Создаем сообщение msg[ ‘From’ ] = addr_from # Адресат msg[ ‘To’ ] = addr_to # Получатель msg[ ‘Subject’ ] = ‘Тема сообщения’ # Тема сообщения body = «Текст сообщения» msg.attach(MIMEText(body, ‘plain’ )) # Добавляем в сообщение текст server = smtplib.SMTP( ‘smtp-server’ , 587) # Создаем объект SMTP server.set_debuglevel( True ) # Включаем режим отладки — если отчет не нужен, строку можно закомментировать server.starttls() # Начинаем шифрованный обмен по TLS server.login(addr_from, password) # Получаем доступ server.send_message(msg) # Отправляем сообщение server.quit() # Выходим

Если необходимо добавить HTML-фрагмент, нужно присоединить к объекту msg ещё один подкласс:

import smtplib # Импортируем библиотеку по работе с SMTP # Добавляем необходимые подклассы — MIME-типы from email.mime.multipart import MIMEMultipart # Многокомпонентный объект from email.mime.text import MIMEText # Текст/HTML from email.mime.image import MIMEImage # Изображения addr_from = «from_address@gmail.com» # Адресат addr_to = «to_address@gmail.com» # Получатель password = «pass» # Пароль msg = MIMEMultipart() # Создаем сообщение msg[ ‘From’ ] = addr_from # Адресат msg[ ‘To’ ] = addr_to # Получатель msg[ ‘Subject’ ] = ‘Тема сообщения’ # Тема сообщения body = «Текст сообщения» msg.attach(MIMEText(body, ‘plain’ )) # Добавляем в сообщение текст

Фрагмент HTML-кода
msg.attach(MIMEText(html, ‘html’ , ‘utf-8’ )) # Добавляем в сообщение HTML-фрагмент

server = smtplib.SMTP( ‘smtp-server’ , 587) # Создаем объект SMTP server.set_debuglevel( True ) # Включаем режим отладки — если отчет не нужен, строку можно закомментировать server.starttls() # Начинаем шифрованный обмен по TLS server.login(addr_from, password) # Получаем доступ server.send_message(msg) # Отправляем сообщение server.quit() # Выходим

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

msg.attach(MIMEText(body, ‘html’ , ‘utf-8’ )) # или msg[ ‘Subject’ ] = Header( ‘Тема сообщения’ , ‘utf-8’ )

При включении режима отладки server.set_debuglevel(True) вся информация о процессе будет выводиться в консоль оболочки Shell. Это скажется на производительности, особенно в случаях вложения в отправление файлов.
При наличии вложений, использовать отладку server.set_debuglevel(True) не рекомендуется!

По такому же принципу к сообщению добавляются файлы — создаются экземпляры соответствующих подклассов и присоединяются к объекту msg . Код для включения различных типов файлов представлен ниже. Также необходимо импортировать дополнительные MIME-типы, энкодеры и библиотеки:

import mimetypes # Импорт класса для обработки неизвестных MIME-типов, базирующихся на расширении файла from email import encoders # Импортируем энкодер from email.mime.base import MIMEBase # Общий тип from email.mime.text import MIMEText # Текст/HTML from email.mime.image import MIMEImage # Изображения from email.mime.audio import MIMEAudio # Аудио # . filepath= «full_file_path_with_filename» # Имя файла в абсолютном или относительном формате filename = os.path.basename(filepath) # Только имя файла if os.path.isfile(filepath): # Если файл существует ctype, encoding = mimetypes.guess_type(filepath) # Определяем тип файла на основе его расширения if ctype is None or encoding is not None : # Если тип файла не определяется ctype = ‘application/octet-stream’ # Будем использовать общий тип maintype, subtype = ctype.split( ‘/’ , 1) # Получаем тип и подтип if maintype == ‘text’ : # Если текстовый файл with open (filepath) as fp: # Открываем файл для чтения file = MIMEText(fp.read(), _subtype=subtype) # Используем тип MIMEText fp.close() # После использования файл обязательно нужно закрыть elif maintype == ‘image’ : # Если изображение with open (filepath, ‘rb’ ) as fp: file = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == ‘audio’ : # Если аудио with open (filepath, ‘rb’ ) as fp: file = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else : # Неизвестный тип файла with open (filepath, ‘rb’ ) as fp: file = MIMEBase(maintype, subtype) # Используем общий MIME-тип file.set_payload(fp.read()) # Добавляем содержимое общего типа (полезную нагрузку) fp.close() encoders.encode_base64(file) # Содержимое должно кодироваться как Base64 file.add_header( ‘Content-Disposition’ , ‘attachment’ , filename=filename) # Добавляем заголовки msg.attach(file) # Присоединяем файл к сообщению

После вынесения функционала отправки сообщения в отдельную функцию, полный код с примером использования будет выглядеть так:

import smtplib # Импортируем библиотеку по работе с SMTP import os # Функции для работы с операционной системой, не зависящие от используемой операционной системы # Добавляем необходимые подклассы — MIME-типы import mimetypes # Импорт класса для обработки неизвестных MIME-типов, базирующихся на расширении файла from email import encoders # Импортируем энкодер from email.mime.base import MIMEBase # Общий тип from email.mime.text import MIMEText # Текст/HTML from email.mime.image import MIMEImage # Изображения from email.mime.audio import MIMEAudio # Аудио from email.mime.multipart import MIMEMultipart # Многокомпонентный объект def send_email (addr_to, msg_subj, msg_text, files): addr_from = «my_addr@server.ru» # Отправитель password = «password» # Пароль msg = MIMEMultipart() # Создаем сообщение msg[ ‘From’ ] = addr_from # Адресат msg[ ‘To’ ] = addr_to # Получатель msg[ ‘Subject’ ] = msg_subj # Тема сообщения body = msg_text # Текст сообщения msg.attach(MIMEText(body, ‘plain’ )) # Добавляем в сообщение текст process_attachement(msg, files) #======== Этот блок настраивается для каждого почтового провайдера отдельно =============================================== server = smtplib.SMTP_SSL( ‘smtp.server.ru’ , 465) # Создаем объект SMTP #server.starttls() # Начинаем шифрованный обмен по TLS #server.set_debuglevel(True) # Включаем режим отладки, если не нужен — можно закомментировать server.login(addr_from, password) # Получаем доступ server.send_message(msg) # Отправляем сообщение server.quit() # Выходим #========================================================================================================================== def process_attachement (msg, files): # Функция по обработке списка, добавляемых к сообщению файлов for f in files: if os.path.isfile(f): # Если файл существует attach_file(msg,f) # Добавляем файл к сообщению elif os.path.exists(f): # Если путь не файл и существует, значит — папка dir = os.listdir(f) # Получаем список файлов в папке for file in dir : # Перебираем все файлы и. attach_file(msg,f+ «/» +file) # . добавляем каждый файл к сообщению def attach_file (msg, filepath): # Функция по добавлению конкретного файла к сообщению filename = os.path.basename(filepath) # Получаем только имя файла ctype, encoding = mimetypes.guess_type(filepath) # Определяем тип файла на основе его расширения if ctype is None or encoding is not None : # Если тип файла не определяется ctype = ‘application/octet-stream’ # Будем использовать общий тип maintype, subtype = ctype.split( ‘/’ , 1) # Получаем тип и подтип if maintype == ‘text’ : # Если текстовый файл with open (filepath) as fp: # Открываем файл для чтения file = MIMEText(fp.read(), _subtype=subtype) # Используем тип MIMEText fp.close() # После использования файл обязательно нужно закрыть elif maintype == ‘image’ : # Если изображение with open (filepath, ‘rb’ ) as fp: file = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == ‘audio’ : # Если аудио with open (filepath, ‘rb’ ) as fp: file = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else : # Неизвестный тип файла with open (filepath, ‘rb’ ) as fp: file = MIMEBase(maintype, subtype) # Используем общий MIME-тип file.set_payload(fp.read()) # Добавляем содержимое общего типа (полезную нагрузку) fp.close() encoders.encode_base64(file) # Содержимое должно кодироваться как Base64 file.add_header( ‘Content-Disposition’ , ‘attachment’ , filename=filename) # Добавляем заголовки msg.attach(file) # Присоединяем файл к сообщению # Использование функции send_email() addr_to = «xxxx@server.ru» # Получатель files = [ «file1_path» , # Список файлов, если вложений нет, то files=[] «file2_path» , «dir1_path» ] # Если нужно отправить все файлы из заданной папки, нужно указать её send_email(addr_to, «Тема сообщения» , «Текст сообщения» , files)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *