Как отправить файл python

Обновлено: 07.07.2024

В данной инструкции мы рассмотрим фрагменты скриптов на Python 3 для работы с почтой. Для примера мы выполним:

  • отправку письма
  • чтение почты на сервере
  • копирование и удаление почты

В качестве операционной системы нами будет использоваться Linux, однако такой же набор команд будет работать на Windows.

Подготовка

Установка python

Ставим python в систему одной из команд.

а) На системах RPM (Red Hat, CentOS, Fedora):

yum install python3

б) На системах DEB (Debian, Ubuntu):

apt-get install python3

Создание скрипта

Для нашей работы будет использоваться скрипт, написанный на python. Создадим каталог, в котором он будет находиться:

Создадим сам скрипт:

* в данном примере мы создали скрипт mail.py с двумя строчками — шебангом и определением кодировки.

И, на последок, даем разрешение на выполнение скрипта:

chmod +x /scripts/mail.py

Настройка почты

В случае использования собственного сервера, нам необходимо создать почтовую учетную запись или использовать имеющуюся.

Отправка почты

Чтение почты

Разобьем процесс на несколько шагов.

Подключение к почтовому ящику

Чтение электронной почты начинается с подключения к почтовому ящику на сервере. Для этого используем такой код:

Пробуем запустить наш скрипт:

. он ничего не должен вернуть. В противном случае, изучаем ошибку — как правило, это может быть ошибка доступа.

Поиск нужного письма

Найдем письмо, с которым будем работать — в данном примере, последнее:

Пробуем запустить скрипт — он тоже должен вернуть пустой ответ. Мы можем добавить в конец нашего скрипта такую строку:

. это позволит увидеть тело письма. После проверки удаляем строку.

Чтение заголовков

Если нам нужны заголовки письма, выполняем такой блок кода:

Описание
1 Импортируем модуль email для получения заголовков и тела писем
2 Получаем заголовки и тело письма и заносим результат в переменную email_message. Обратите внимание, что мы используем переменную raw_email_string, в которую на этапе выше занесли необработанное письмо.
4 Выводим на экран заголовок To (кому отправлено письмо)
5 Выводим на экран заголовок From (от кого отправлено письмо)
6 Выводим на экран заголовок Date (дата отправки письма)
7 Выводим на экран заголовок Subject (тема письма)
8 Выводим на экран заголовок Message-Id (идентификатор письма)

* в данном скрипте приведен пример нескольких заголовков. Весь массив с заголовками можно вывести строкой print(email_message).

Чтение тела письма

Получаем текст письма:

Описание
1 Импортируем модуль email для получения заголовков и тела писем
2 Получаем заголовки и тело письма и заносим результат в переменную email_message. Обратите внимание, что мы используем переменную raw_email_string, в которую на этапе выше занесли необработанное письмо.
4 - 7 Проверяем, является ли письмо многокомпонентным. Если да, то выводим по очереди на экран значения каждого компонента. Предварительно, перекодируем текст в UTF-8.
8 - 10 Если письмо не многокомпонентное, выводим его содержимое.

Копирование

Для копирования предусмотрен специальный метод copy:

Удаление

* в данном примере мы вызываем метод store сессии mail, устанавливаем флаг Deleted для письма с идентификатором mail_id.

Перемещение

Перемещение можно выполнить копированием с последующим удалением:

* в данном примере мы копируем письмо с mail_id в INBOX/Completed; если копирование выполнено успешно, то письмо помечается на удаление и удаляется окончательно.

Пример скрипта


Пайтон содержит несколько действительно полезных модулей, которые можно использовать для создания электронной рассылки. Это модули email и smtplib. Вместо того чтобы рассматривать различные методы в этих двух модулях, мы уделим больше времени на то, как их, собственно, использовать. В частности, мы рассмотрим следующие этапы работы:

  • Основы работы с почтой;
  • Как выполнять рассылку нескольким адресатам за раз;
  • Как отправлять письма, используя строки TO, CC и BCC
  • Как создавать содержимое и тело письма при помощи модуля email.

Основы работы с почтой – как отправлять письма при помощи smtplib

Модуль smtplib весьма интуитивен в пользовании. Давайте проведем небольшой пример, который покажет, как при помощи данного модуля отправлять почту. Сохраните нижеизложенный код в файле на вашем жестком диске:

Мы выполнили импорт двух модулей, smtplib и string. Две трети этого кода используются для настройки почты. Большая часть переменных прекрасно объясняют сами себя, так что мы сфокусируемся на BODY. Мы воспользуемся модулем string, чтобы скомбинировать все переменные в единую строку, в которой каждая строчка заканчивается“/r”, а новая начинается с “/n”. После вывода BODY вы получите следующую картину:

После этого, нам нужно установить соединение нашего хоста с сервером, после чего мы вызываем метод sendmail в модуле smtplib и отправляем письмо. После этого мы отключаемся от сервера. Обратите внимание на то, что в этом коде нет пароля и логина. Если ваш сервер требует залогиниться, вам нужно будет добавить следующий код:

Эта часть должна быть добавлена сразу после создания объекта сервер. Как правило, вам, скорее всего, захочется добавить этот код в функцию и вызвать его с теми или иными параметрами. Или же вам может потребоваться использовать часть этой информации в файл config. Попробуем добавить этот код в функцию.

def send_email ( host , subject , to_addr , from_addr , body_text ) : send_email ( host , subject , to_addr , from_addr , body_text )

Теперь вы видите, насколько маленький код на самом деле, если взглянуть на саму функцию. Всего 13 строчек. Мы можем сделать его еще короче, если не будем добавлять каждый элемент в BODY в его собственной строке, но это будет не так читаемо. Сейчас мы создадим файл config, чтобы сберечь информацию сервера и адреса.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Зачем? К примеру, в работе вам может понадобиться несколько почтовых серверов для рассылки писем, или если почтовый сервер обновился, и название теперь новое. В таком случае нам нужно только изменить файл config, а не менять сам код. То же самое может понадобиться, если ваша компания была куплена, или слилась с другой. Давайте взглянем на файл config (сохраните его под названием email.ini):

Это очень простой файл config. В нем есть секция, под названием smtp, в которой у нас есть два объекта: server и from_addr. Мы воспользуемся configObj для чтения этого файла и вернемся к словарю Пайтон. Вот обновленная версия кода (сохраните её под именем smtp_config.py):

base_path = os.path . dirname ( os.path . abspath ( __file__ ) )

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

base_path = os.path . dirname ( os.path . abspath ( __file__ ) )

Рассылка писем при помощи строчек TO, CC и BCC

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

def send_email ( subject , body_text , to_emails , cc_emails , bcc_emails ) : base_path = os.path . dirname ( os.path . abspath ( __file__ ) ) send_email ( subject , body_text , emails , cc_emails , bcc_emails )

В этом коде мы указали три списка, каждый из которых содержит по одному электронному адресу. Мы создали поля CC и BCC таким же образом, как делали это ранее, с той разницей, что теперь нам нужно соединить три списка в один, чтобы мы могли указать полученный список методу sendmail(). На разных форумах пишут, что некоторые почтовые клиенты обрабатывают поле BCC нечётно, из-за чего получатель может видеть содержимое списка ВСС через заголовки писем. Однако мы точно знаем, что Gmail успешно удаляет ВСС данные из заголовка письма.

Теперь мы готовы перейти к модулю email!

Добавление вложения \ тела письма при помощи модуля email

Теперь мы возьмем все то, чему мы научились в предыдущих разделах и смешаем их вместе с модулем email, чтобы отправлять письма с прикрепленными файлами. Модуль email позволяет прикреплять вложения к письму очень просто. Вот код:

def send_email_with_attachment ( subject , body_text , to_emails , cc_emails , bcc_emails , file_to_attach ) : base_path = os.path . dirname ( os.path . abspath ( __file__ ) ) header = 'Content-Disposition' , 'attachment; filename="%s"' % file_to _ attach msg = "Error opening attachment file %s" % file_to_attach server . sendmail ( from_addr , emails , msg . as_string ( ) ) send_email_with_attachment ( subject , body_text , emails , cc_emails , bcc_emails , path )

В данном коде мы переименовали нашу функцию и добавили новый аргумент file_to_attach. Нам также нужно добавить заголовок и создать объект MIMEMultipart. Заголовок может быть создан в любое время, перед тем как мы добавим вложение. Мы добавим элементы в объект MIMEMultipart (msg) также, как и ключевые слова в словарь. Обратите внимание на то, что нам нужно использовать метод formatdate модуля email, чтобы ввести данные правильного формата. Чтобы добавить тело письма, нам нужно создать экземпляр MIMEText. Как вы могли заметить, мы не добавляем информацию BCC, но вы можете легко это сделать, следуя условиям написанного выше кода. Далее мы добавляем вложение. Мы размещаем его в обработчике исключений и используем оператор with для извлечения файла и помещения его в наш объект MIMEBase. Наконец мы добавляем его в переменную msg и отправляем. Обратите внимание на то, что нам нужно конвертировать msg в методе sendmail в строку.

Подведем итоги

Теперь вы знаете, как отправлять почту при помощи Python. Для тех из вас, кто любит мини проекты, вы можете вернуться назад и добавить обработку дополнительную ошибку в кодовой части server.sendmail, если что-то не так пойдет во время процесса работы, типа ошибки SMTPAuthenticationError или SMTPConnectError. Мы можем также увеличить обработку ошибок во время прикрепления файла к телу письма, чтобы уловить другие ошибки. Наконец, мы можем взять списки различных писем, чтобы создать один нормальный, в котором отсутствуют дубликаты адресов. Это очень важно, если мы читаем список электронных адресов из файла. Также обратите внимание на то, что адрес from – не настоящий. Мы можем подделывать письма при помощи Пайтона и других языков программирование, однако это крайне неэтично, а в некоторых странах еще и нелегально. Имейте ввиду! Используйте свои знания правильно и пользуйтесь Пайтоном для удовольствия и с пользой.


Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

SMTPlib Python

Из данной статьи мы узнаем:

  • Как настроить безопасное подключение при помощи SMTP_SSL() и .starttls()
  • Как использовать встроенную библиотеку Python под названием smtplib для отправки простых писем;
  • Как отправлять письма с HTML содержимым и прикрепленными файлами при помощи пакета email;
  • Как отправлять несколько персонализированных писем при помощи файла СSV с контактными данными;
  • Как использовать пакет Yagmail для отправки через аккаунт Gmail используя всего несколько строк кода.

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

Изучаем модуль smtplib Python

В Python есть встроенный модуль smtplib, предназначенный для отправки писем, используя Simple Mail Transfer Protocol (SMTP). Модуль smtplib использует протокол RFC 821 для SMTP. Примеры в данной статье будут браться из сервера Gmail SMTP для отправки писем, однако те же принципы будут актуальны и для других почтовых сервисов. Кроме этого, множество почтовых провайдеров используют те же порты подключения, что и упомянутые в этой статье, так что вы можете провести быстрый поиск в гугле, чтобы узнать о используемых вами портах.

Для начала, настроим аккаунт Gmail для разработки, или настроим сервер отладки SMTP, который отбрасывает отправленные вами письма и выводит их в командную строку. Мы рассмотрим оба варианта дальше. Локальный сервер отладки SMTP может быть полезным для решения любых проблем, связанных с функционалом почты и обеспечения исправности функций электронной почты перед перед тем как какое-либо из писем будет отправлено.

Настройка аккаунта Gmail для тестов с smtplib

Если вы решили использовать аккаунт Gmail для отправки писем, я настоятельно рекомендую настроить одноразовую учетную запись для разработки вашего кода. Это важно, так как вам придется настроить параметры безопасности вашего аккаунта Gmail для открытия доступа из вашего кода Python, а также есть вероятность того, что вы раскроете свои данные входа. Кстати, я обнаружил, что раздел входящих писем моего тестового аккаунта быстро набился тестовыми письмами, что является еще одной причиной настроить новый аккаунт Gmail для тестов.

Для настройка адреса Gmail для тестирования вашего кода, выполните следующее:

  1. Создайте новый аккаунт в гугле;
  2. Активируйте разрешение на использование небезопасных приложений. Учитывайте, что это упрощает другим получить доступ к вашему аккаунту;

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

Настройка VPS сервера c SMTP от Fornex (Вариант №2)

Работая на уже настроенном VPS сервере позволяет вам быстрее изучить операционную систему Linux. Такие знания приветствуются у тех кто только начинает свой путь как Python-разработчик. В качестве примера мы выбрали самый устойчивый VPS хостинг от Fornex. Используя такой подход, вы можете запускать парсеры того же Avito или Юла для составления собственной базы данных для E-mail рассылки. Мощный SSD Хостинг позволит ускорить работу по сбору и обработки данных на VPS.

После регистрации на Fornex вам предстоит выбор услуги:

VPS от Fornex

Выбираем нужный нам VPS с которым мы будем работать:

VPS тариф

После, нам предстоит выбрать операционную системы. Мы отдаём предпочтение Ubuntu. В нашем случае, необходимости в панели управления нет. Выбираем "Без панели".

VPS операционная система

После удачной установки, Fornex предоставит нам все данные для входа в наш новый VPS. Прежде чем начать работу с ним, Вам предстоит установка обновлений, необходимых библиотек и установка последней версии Python 3.7.

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

Введение в SMTP

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

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

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

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

Create and Send a Simple Email
Create and Send a Simple Email
Create and Send a Simple Email

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

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

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

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

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

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

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

The HTML Template
The HTML Template
The HTML Template

Formatted HTML email
Formatted HTML email
Formatted HTML email

Заключение

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

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

Читайте также: