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

Обновлено: 21.11.2024

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

В этом руководстве вы узнаете, как:

Настройте безопасное соединение с помощью SMTP_SSL() и .starttls()

Используйте встроенную библиотеку Python smtplib для отправки простых электронных писем

Отправлять электронные письма с содержимым HTML и вложениями с помощью пакета электронной почты

Отправлять несколько персонализированных электронных писем, используя CSV-файл с контактными данными

Используйте пакет Yagmail для отправки электронной почты через свою учетную запись Gmail, используя всего несколько строк кода

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

Бесплатная загрузка: получите пример главы из книги «Python Tricks: The Book», в которой показаны передовые практики Python с простыми примерами, которые вы можете мгновенно применить для написания более красивого + Pythonic кода.

Начало работы

Python поставляется со встроенным модулем smtplib для отправки электронной почты с использованием простого протокола передачи почты (SMTP). smtplib использует протокол RFC 821 для SMTP. В примерах этого руководства для отправки электронных писем будет использоваться SMTP-сервер Gmail, но те же принципы применимы и к другим почтовым службам. Хотя большинство провайдеров электронной почты используют те же порты подключения, что и в этом руководстве, вы можете выполнить быстрый поиск в Google, чтобы подтвердить свой.

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

Вариант 1. Настройка учетной записи Gmail для разработки

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

Чтобы настроить адрес Gmail для тестирования кода, выполните следующие действия:

    .
  • Включите для параметра Разрешить менее безопасные приложения значение ВКЛ. Имейте в виду, что это облегчает другим пользователям доступ к вашему аккаунту.

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

Вариант 2. Настройка локального SMTP-сервера

Вы можете протестировать работу электронной почты, запустив локальный сервер отладки SMTP с помощью модуля smtpd, который предварительно устанавливается вместе с Python. Вместо того, чтобы отправлять электронные письма на указанный адрес, он отбрасывает их и выводит их содержимое на консоль. Запуск локального сервера отладки означает, что вам не нужно иметь дело с шифрованием сообщений или использовать учетные данные для входа на сервер электронной почты.

Вы можете запустить локальный сервер отладки SMTP, введя в командной строке следующее:

В Linux используйте ту же команду с предшествующим sudo .

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

В оставшейся части руководства я буду предполагать, что вы используете учетную запись Gmail, но если вы используете локальный сервер отладки, просто убедитесь, что в качестве SMTP-сервера используется localhost и порт 1025, а не порт 465 или 587. Кроме того, вам не нужно использовать login() или шифровать связь с помощью SSL/TLS.

Отправка простого текста

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

Запуск безопасного SMTP-подключения

Когда вы отправляете электронные письма через Python, вы должны убедиться, что ваше SMTP-соединение зашифровано, чтобы ваше сообщение и учетные данные для входа не могли быть легко доступны другим. SSL (Secure Sockets Layer) и TLS (Transport Layer Security) — это два протокола, которые можно использовать для шифрования SMTP-соединения. Нет необходимости использовать любой из них при использовании локального сервера отладки.

Существует два способа установить безопасное соединение с вашим почтовым сервером:

  • Запустите SMTP-подключение, защищенное с самого начала с помощью SMTP_SSL().
  • Запустите незащищенное SMTP-подключение, которое затем можно зашифровать с помощью .starttls() .

В обоих случаях Gmail будет шифровать электронные письма с помощью TLS, так как это более безопасный преемник SSL. В соответствии с соображениями безопасности Python настоятельно рекомендуется использовать create_default_context() из модуля ssl. Это загрузит доверенные сертификаты ЦС системы, включит проверку имени хоста и проверки сертификата, а также попытается выбрать достаточно безопасный протокол и параметры шифрования.

Если вы хотите проверить шифрование электронной почты в папке "Входящие" Gmail, выберите ДополнительноПоказать оригинал, чтобы увидеть тип шифрования, указанный в разделе Получено заголовок.

smtplib — это встроенный в Python модуль для отправки электронной почты на любой интернет-компьютер с демоном прослушивания SMTP или ESMTP.

Сначала я покажу вам, как использовать SMTP_SSL(), так как он устанавливает безопасное с самого начала соединение и является немного более кратким, чем альтернатива .starttls(). Имейте в виду, что Gmail требует подключения к порту 465 при использовании SMTP_SSL() и к порту 587 при использовании .starttls().

Вариант 1. Использование SMTP_SSL()

Использование с smtplib.SMTP_SSL() в качестве сервера: гарантирует, что соединение автоматически закрывается в конце блока кода с отступом. Если порт равен нулю или не указан, .SMTP_SSL() будет использовать стандартный порт для SMTP через SSL (порт 465).

Небезопасно хранить пароль электронной почты в коде, особенно если вы собираетесь поделиться им с другими. Вместо этого используйте input(), чтобы позволить пользователю вводить свой пароль при запуске скрипта, как в примере выше. Если вы не хотите, чтобы ваш пароль отображался на экране при его вводе, вы можете импортировать модуль getpass и использовать вместо него .getpass() для слепого ввода пароля.

Вариант 2. Использование .starttls()

Вместо использования .SMTP_SSL() для создания безопасного соединения с самого начала, мы можем создать незащищенное SMTP-соединение и зашифровать его с помощью .starttls() .

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

В приведенном ниже фрагменте кода используется построение server = SMTP() , а не формат с SMTP() в качестве сервера, который мы использовали в предыдущем примере. Чтобы убедиться, что ваш код не зависнет, когда что-то пойдет не так, поместите основной код в блок try и позвольте блоку исключений выводить все сообщения об ошибках на стандартный вывод:

Чтобы идентифицировать себя на сервере, .helo() (SMTP) или .ehlo() (ESMTP) следует вызывать после создания объекта .SMTP() и снова после .starttls() . Эта функция неявно вызывается .starttls() и .sendmail(), если это необходимо, поэтому, если вы не хотите проверять расширения службы SMTP сервера, нет необходимости использовать .helo() или .ehlo() явно.< /p>

Отправка обычного текста

После того, как вы инициировали безопасное SMTP-подключение с помощью любого из вышеперечисленных методов, вы можете отправить свою электронную почту с помощью .sendmail() , что в значительной степени делает то, что написано на банке:

Я рекомендую указать адреса электронной почты и содержание сообщений в верхней части вашего скрипта после импорта, чтобы вы могли легко их изменить:

Строка сообщения начинается с «Тема: Привет», за которой следуют два символа новой строки ( \n ). Это гарантирует, что Привет будет отображаться как тема электронного письма, а текст после новой строки будет рассматриваться как тело сообщения.

Пример кода ниже отправляет электронное письмо в виде обычного текста с использованием SMTP_SSL():

Для сравнения приведен пример кода, который отправляет текстовое электронное письмо через SMTP-подключение, защищенное с помощью .starttls() . Строки server.ehlo() могут быть опущены, так как они вызываются неявно функциями .starttls() и .sendmail(), если это необходимо:

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

Встроенный пакет электронной почты Python позволяет вам структурировать более сложные электронные письма, которые затем можно передавать с помощью smtplib, как вы уже делали. Ниже вы узнаете, как использовать пакет электронной почты для отправки электронных писем с HTML-содержимым и вложениями.

Включение содержимого HTML

Если вы хотите отформатировать текст сообщения электронной почты (жирный, курсив и т. д.) или добавить изображения, гиперссылки или адаптивный контент, HTML удобный. На сегодняшний день наиболее распространенным типом электронной почты является MIME (многоцелевое расширение почты Интернета). Составная электронная почта, сочетающая HTML и обычный текст. Сообщения MIME обрабатываются модулем Python email.mime. Подробное описание см. в документации.

Поскольку не все почтовые клиенты по умолчанию отображают HTML-содержимое, а некоторые люди из соображений безопасности предпочитают получать электронные письма только в виде обычного текста, важно включить альтернативу в виде обычного текста для HTML-сообщений.Поскольку клиент электронной почты сначала обработает последнее составное вложение, не забудьте добавить HTML-сообщение после текстовой версии.

В приведенном ниже примере наши объекты MIMEText() будут содержать версии нашего сообщения в формате HTML и обычного текста, а экземпляр MIMEMultipart("alternative") объединяет их в одно сообщение с двумя альтернативными вариантами отображения:

В этом примере вы сначала определяете обычный текст и HTML-сообщение как строковые литералы, а затем сохраняете их как объекты MIMEText в виде простого/html-текста. Затем их можно добавить в указанном порядке в сообщение MIMEMultipart("alternative") и отправить через защищенное соединение с почтовым сервером. Не забудьте добавить HTML-сообщение после простого текста, так как почтовые клиенты сначала попытаются отобразить последнюю часть.

Добавление вложений с помощью пакета электронной почты

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

В приведенном ниже примере кода показано, как отправить электронное письмо с файлом PDF в качестве вложения:

Сообщение MIMEultipart() принимает параметры в виде пар ключ/значение в стиле RFC5233, которые хранятся в словаре и передаются методу .add_header базового класса Message.

Ознакомьтесь с документацией для модуля Python email.mime, чтобы узнать больше об использовании классов MIME.

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

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

Создайте CSV-файл с соответствующей личной информацией

Простой отправной точкой для отправки нескольких персонализированных электронных писем является создание файла CSV (значения, разделенные запятыми), который содержит всю необходимую личную информацию. (Не разглашайте личную информацию других людей без их согласия.) CSV-файл можно рассматривать как простую таблицу, первая строка которой часто содержит заголовки столбцов.

При создании CSV-файла обязательно разделяйте значения запятой без каких-либо окружающих пробелов.

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

В приведенном ниже примере кода показано, как открыть файл CSV и перебрать строки его содержимого (пропустив строку заголовка). Чтобы убедиться, что код работает правильно, прежде чем вы отправите электронные письма всем своим контактам, я напечатал Отправка электронной почты на . для каждого контакта, который мы позже можем заменить функциональностью, которая фактически отправляет электронные письма:

В приведенном выше примере использование with open(filename) as file: гарантирует, что ваш файл будет закрыт в конце блока кода. csv.reader() позволяет легко читать CSV-файл построчно и извлекать его значения. Следующая строка (читатель) пропускает строку заголовка, так что следующая строка для имени, электронной почты, оценки в читателе: разбивает последующие строки на каждую запятую и сохраняет полученные значения в строках имя, адрес электронной почты и оценка для текущего контакта.

Если значения в вашем CSV-файле содержат пробелы с одной или обеих сторон, вы можете удалить их с помощью метода .strip().

Персонализированный контент

Вы можете поместить в сообщение персонализированный контент, используя функцию str.format() для заполнения фигурных скобок. Например, "привет, вы выполнили задание".

Начиная с Python 3.6 форматирование строк может быть выполнено более элегантно с помощью f-строки, но для этого требуется, чтобы заполнители были определены до самой f-строки. Чтобы определить сообщение электронной почты в начале сценария и заполнить заполнители для каждого контакта при циклическом просмотре CSV-файла, используется старый метод .format().

Помня об этом, вы можете настроить общий текст сообщения с заполнителями, которые можно настроить для отдельных лиц.

Пример кода

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

Ягмейл

Существует несколько библиотек, предназначенных для упрощения отправки электронных писем, таких как Envelopes, Flanker и Yagmail. Yagmail разработан специально для работы с Gmail и значительно упрощает процесс отправки электронных писем через дружественный API, как показано в примере кода ниже:

В этом примере кода электронное письмо с вложением в формате PDF отправляется с использованием электронной почты и smtplib .

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

Сервисы транзакционной электронной почты

Если вы планируете отправлять большое количество электронных писем, хотите просматривать статистику электронной почты и хотите обеспечить надежную доставку, возможно, вам стоит обратить внимание на службы транзакционной электронной почты. Хотя все следующие сервисы имеют платные планы для отправки больших объемов электронных писем, они также поставляются с бесплатным планом, чтобы вы могли их опробовать. Некоторые из этих бесплатных планов действуют бессрочно, и их может быть достаточно для ваших потребностей в электронной почте.

Ниже приведен обзор бесплатных планов для некоторых основных служб транзакционной электронной почты. Нажав на имя поставщика, вы перейдете в раздел ценообразования на его веб-сайте.

< td>Amazon SES
Provider Бесплатный план
Sendgrid 40 000 электронных писем в течение первых 30 дней, затем 100 писем в день
Sendinblue 300 писем в день
Mailgun Первые 10 000 электронных писем бесплатно
Mailjet 200 электронных писем в день
62 000 писем в месяц

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

Пример кода Sendgrid

Вот пример кода для отправки электронной почты с помощью Sendgrid, чтобы дать вам представление о том, как использовать службу транзакционной электронной почты с Python:

Чтобы запустить этот код, необходимо сначала:

Дополнительную информацию о настройке Sendgrid для Mac и Windows можно найти в файле README репозитория на Github.

Заключение

Теперь вы можете установить безопасное SMTP-соединение и отправлять несколько персонализированных электронных писем людям из вашего списка контактов!

Вы узнали, как отправлять сообщения электронной почты в формате HTML с альтернативным текстом и прикреплять файлы к сообщениям электронной почты. Пакет Yagmail упрощает все эти задачи, если вы используете учетную запись Gmail. Если вы планируете отправлять большие объемы электронной почты, стоит обратить внимание на службы транзакционной электронной почты.

Наслаждайтесь отправкой электронных писем с помощью Python и помните: никакого спама, пожалуйста!

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

Раз в несколько дней получайте короткие и интересные трюки с Python. Никакого спама никогда. Отписаться в любое время. Куратор: команда Real Python.

О Джоске де Ланген

Йоска – специалист Ordina Pythoneer, который пишет для Real Python.

Освойте навыки работы с Python в реальном мире с неограниченным доступом к реальному Python

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

Освойте навыки работы с Python в реальном мире
с неограниченным доступом к реальному Python

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

Что вы думаете?

Настоящая политика комментариев Python: самые полезные комментарии — это те, которые написаны с целью обучения или помощи другим читателям — после прочтения всей статьи и всех предыдущих комментариев. Жалобы и оскорбления, как правило, здесь неуместны.

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

Возникла бизнес-потребность в отправке электронных писем с вложениями Excel в файл из основного файла Excel для создания собственного файла, а затем по электронной почте этого файла. Вложения даты [] для идентификатора, group_df в customer_group: вложение. изучить Python, чем применять его для решения одной из собственных проблем.

Используйте встроенную библиотеку Python smtplib для отправки простых сообщений электронной почты. Отправляйте электронные письма с содержимым HTML и вложениями, используя пакет электронной почты. Отправляйте несколько персонализированных писем, используя CSV-файл с контактными данными. Используйте пакет Yagmail для отправки электронной почты через свою учетную запись Gmail, используя всего несколько строк кода.

Я хочу отправить по электронной почте объект книги Excel в виде вложения, не сохраняя его «вложение», имя файла «Имя файла здесь») msg.прикрепить (часть) smtp Можно ли отправить объект книги excel в виде файла excel с использованием MIME ?? какое это имеет отношение к блендеру? похоже на более общий запрос Python для стека

Отправить файл или вложение по электронной почте в Python с помощью SMTP. Здесь используется NetworkCredential для аутентификации на основе пароля. xls"); поместите "Пожалуйста, найдите прикрепленный файл"; Переполнение стека. Создайте файл csv из таблицы сервера sql для отправки почты.

Отправить обычное электронное письмо с зашифрованным вложением, которое получатель может открыть с минимальными трудностями, из email.mime.multipart import MIMEMultipart Определите все переменные в верхней части файла python для удобства редактирования.

Изображение обложки для Автоматизация отправки электронных писем из Excel с помощью Python Файл Excel содержит много информации, но мы сосредоточимся на самой важной теме msg['Subject'] msg.attach(MIMEText(message, 'plain')) text

Отправка электронной почты в формате HTML; Отправку писем с вложениями в Python Mailtrap очень легко настроить: вам нужно будет просто скопировать учетные данные, сгенерированные из email.mime.multipart import MIMEMultipart port 2525 smtp_server

Как отправить электронное письмо с вложениями в Python из email.mime.multipart import MIMEMultipart Прикрепите его к объекту MIMEMultipart. Вы можете легко добавить в сообщение электронной почты вложение, например файл CSV или TXT

На данный момент я создал несколько сценариев. Недавно я создал скрипт, который создавал электронное письмо в Outlook, прикреплял электронную таблицу и отправлял электронную таблицу по электронной почте

<р>1. Откройте в Gmail электронное письмо, содержащее вложение, которое вы хотите переслать. 2. Нажмите значок "Дополнительно" в правом верхнем углу сообщения и нажмите "Переслать"

Сначала мы установим xlrd. Xlrd — это библиотека для извлечения данных из файлов электронных таблиц Microsoft Excel (tm). После этого мы импортируем smtplib. smtplib

Удобная отправка электронных писем на Python (с вложениями и несколькими частями) — email_utils.py. from email.mime.multipart import MIMEMultipart self.port int(data[1]). иначе:.

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

Этот обходной путь позволит вам отправлять электронные письма в виде вложений в Gmail. Откройте электронное письмо, которое вы хотите отправить в виде вложения. Нажмите на маленький значок принтера над

to_name raw_input(' - Имя получателя: '). предмет "Легкая отправка почты с помощью Python". сообщение «вот тело сообщения». вложения [sys.argv[0]].

импорт ОС. из email.mime.multipart импортировать MIMEMultipart. из email.mime.text импортировать скрипт MIMEText для отправки электронных писем с использованием Python с помощью командной строки.

Отправка почты в Python, включая вложения, чтение содержимого Excel, список получателей в диапазоне (2, 4): receive_list.append(sheet.cell(rowrowNum,column2).value)

Отправка электронных писем с HTML-содержимым и вложениями с помощью почтового пакета. В примерах этого руководства для отправки электронных писем будет использоваться SMTP-сервер Gmail, но

В этом руководстве вы узнаете, как отправлять электронные письма с помощью Python. Узнайте, как отправлять обычные текстовые сообщения и сообщения в формате HTML, добавлять файлы в качестве вложений и отправлять

В этом курсе вы узнаете, как отправлять электронные письма с помощью Python. Узнайте, как отправлять обычные текстовые сообщения и сообщения в формате HTML, добавлять файлы в качестве вложений и отправлять

Включая HTML-контент; Добавление вложений с помощью пакета электронной почты. Отправка Отправляйте несколько персонализированных писем, используя CSV-файл с контактными данными.

Python поставляется со встроенным модулем smtplib для отправки электронных писем с помощью Simple Real Python

Отправка файла xlsx с использованием SMTP и Python 3. python excel smtp smtplib. У меня возникли проблемы с тем, чтобы сервер SMTP сохранял имена моих файлов при прикреплении

Инструкции по отправке почты с вложениями по протоколу SMTP (smtplib). Создать МИМ. Добавьте адрес отправителя и получателя в MIME. Добавьте заголовок письма в

Вот модифицированная версия от Oli для python 3 import smtplib from pathlib import Path from email.mime.multipart import MIMEMultipart from

импорт smtplib; из email.mime.multipart импортировать MIMEMultipart; из кода Python email.mime.text для иллюстрации отправки почты с вложениями.

Откройте файл, который вы хотите прикрепить, в режиме «rb». Затем создайте экземпляр MIMEBase с двумя параметрами. Первый — «_maintype» и

Прикрепить файл. На компьютере перейдите в Gmail. Нажмите «Создать». Внизу нажмите Прикрепить . Выберите файлы, которые вы хотите загрузить. Нажмите Открыть.

Начнем с импорта необходимых библиотек Python. import smtplib from email.mime.text import MIMEText from email.mime.multipart import

Теперь, когда вы знаете, как создавать безопасные подключения к почтовому серверу, пришло время отправить электронное письмо. Мы собираемся изменить этот код на

Как отправлять электронные письма с помощью Python. Настройте SMTP-сервер и войдите в свою учетную запись. Создайте объект сообщения MIMEMultipart и загрузите его с помощью

Когда они хотят добавить новые товары в интернет-магазин, они создают электронную таблицу Excel с несколькими сотнями строк вместе с названием товара

Как мне добавить вложение документа при отправке электронного письма с помощью python? Я получаю электронное письмо для отправки. Пожалуйста, игнорируйте, я зацикливаю электронное письмо для отправки

Что нужно для отправки электронной почты с помощью Python? Некоторые базовые поддельные SMTP-серверы имитируют работу реального стороннего веб-сервера. В дальнейшем

Мгновенно получайте примеры кода, такие как "настоящая отправка электронных писем Python", прямо из результатов поиска Google с помощью расширения Grepper для Chrome.

Почему бы вам не сохранить часть, которую вы хотите отправить, в виде нового отдельного файла Excel, а затем прикрепить его к электронному письму? – Мехпер С 2. 1.

Отправлять вложения Google Диска в Gmail. Если файл или файлы, которые вы хотите отправить в

Сегодня мы узнаем, как отправлять почту с вложением и темой с помощью Python.

Марко Вентури

"Привет, не могли бы вы прислать мне электронные письма наших клиентов? Мы собираемся запустить новую маркетинговую кампанию, и… они нужны нам как можно скорее».

Если вы работаете в веб-отделе на корпоративном уровне, вы, вероятно, слышали это предложение сотни раз. Итак, сегодня я хочу поделиться тем, как я решил эту проблему для компании, в которой работал.

Какой был запрос?

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

Наш отдел маркетинга попросил мою команду предоставить им адреса электронной почты и имена всех наших клиентов для запуска новой кампании.

Я ожидал, что они будут запрашивать CSV-файл для массовой загрузки контактов на свою маркетинговую платформу. Вместо этого они сказали мне, что им нужен файл Excel, так как они должны были отредактировать его, прежде чем приступить к запуску кампании.

После того, как мне поручили задачу Jira, я был готов начать.

Анализ проблемы

WooCommerce предоставляет пользователям функцию экспорта для получения данных клиентов, но не создает файл Excel. Он создает файл CSV или XML.

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

Я нашел несколько вариантов в каталоге плагинов WordPress, но каждый раз, когда вы устанавливаете новый плагин в своем экземпляре, нужно учитывать многое. Вы должны подумать о затратах на обслуживание (учитывайте, что каждый раз, когда разработчик работает над этим, они регистрируют часы, которые влияют на ваш бюджет), уязвимостях системы безопасности и, что не менее важно, утверждение покупки может занять много времени.

Я также рассматривал второй вариант: загрузить файл CSV через пользовательский интерфейс и преобразовать его в файл Excel с помощью одной из тысяч служб, которые можно найти в Интернете.

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

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

WordPress предоставляет разработчикам API. Многие другие плагины из системы WordPress также предоставляют API, и WooCommerce не является исключением. Документация надежна и предлагает ссылки на библиотеки для наиболее часто используемых языков, таких как Node.js, Python, PHP и Ruby.

  • Два столбца: имя и адрес электронной почты
  • Одна строка на клиента

Я выбрал Python по нескольким причинам: существуют сотни библиотек, которые могут помочь вам выполнить работу, он гибок и очень полезен, когда дело доходит до обработки данных.

Я также решил использовать Pandas и Openpyxl для обработки данных и создания файла Excel.

Прежде чем писать код, давайте получим то, что нам нужно

Для работы с WooCommerce API мне нужно сгенерировать ключи API для работы. Дополнительную информацию можно найти в официальной документации WooCommerce.

Сначала вам нужно войти в свой экземпляр WooCommerce, а затем перейти в WooCommerce > Настройки > Дополнительно > REST API.

Затем я дам ему краткое описание, выберу пользователя, для которого я хочу сгенерировать API, выберу предоставленные разрешения (чтение/запись или оба), а затем нажму "Создать ключ API".

Далее я получу Consumer Key и Consumer Secret:

Как подготовить среду

Первое, что я сделал, это добавил необходимые библиотеки для разработки моего скрипта. Я начал с библиотеки Python для WooCommerce. Чтобы установить его, я выполнил эту команду:

Хорошо. Теперь я продолжу и установлю Pandas, инструмент для анализа и обработки данных для Python:

После этого я установил Openpyxl, библиотеку Python для чтения и записи файлов Excel:

Давайте программировать

Я сделал вызов API, используя функцию API, предоставляемую библиотекой WooCommerce Python, и сохранил ее в переменной. Затем я передал функции базовый URL-адрес моего веб-сайта WooCommerce, ключ потребителя, секрет потребителя и версию.

Я преобразовал его в объект Pandas и сохранил в переменной "df_json":

Я использовал функцию to_excel(), чтобы преобразовать объект в файл Excel. Я передал функции три аргумента:

  • Имя файла, который я собирался создать
  • Индекс установлен на «false», так как я не хочу, чтобы идентификатор записи печатался в моем файле.
  • Столбцы, которые я хотел напечатать в своем файле (имя и адрес электронной почты)

Я запустил скрипт и получил следующее:

Вот и все. Вот как я создал файл Excel с адресами электронной почты и именами клиентов с помощью WooCommerce API и Python, написав менее 20 строк кода.

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

Заключительные мысли

Я также хотел поделиться другим контентом, который нашел в Интернете во время изучения этого скрипта.

Первый вопрос — вопрос о переполнении стека. Это помогло мне оптимизировать мой код при создании файла JSON. Мне очень понравился выбранный вопрос, особенно когда в нем говорилось, как можно написать «более приятный» файл JSON в современной системе.

Второй о пандах. Если вы пишете код на Python, рано или поздно вам придется иметь дело с данными и их обработкой. В этой статье Эрика Марсья очень хорошо объясняется, как вы можете преобразовать файл JSON в Excel с помощью Pandas. Он дает читателям несколько советов о том, как использовать эту мощную библиотеку для эффективного и действенного отображения нужных им данных.

Не стесняйтесь поделиться этой записью, если она показалась вам полезной! Вы также можете найти полный код в этом репозитории Github.

Источник: Unsplash

В этом руководстве мы покажем вам, как отправлять электронные письма с помощью Python.

Мы можем легко автоматизировать процесс отправки электронных писем с помощью Python. Это удобно, когда вы отправляете похожий контент снова и снова. Эта автоматизация может уменьшить человеческие ошибки и освободить ваше время!
Например, если вам нужно обновить список контактов на основе новых ежедневных данных, вы можете использовать Python, чтобы создать новый отчет и поделиться им с ними, отправив электронные письма. Или, если у вас есть программа на Python, выполнение которой занимает много времени, вы можете попросить Python отправить вам электронное письмо с напоминанием, когда это будет сделано.

Следуя этому руководству, вы узнаете на примерах:

  • Как безопасно подключиться к SMTP-серверу вашей электронной почты
  • Как отправлять электронные письма с обычным текстом (с Тема, Кому, нескольким получателям)
  • Как отправлять электронные письма с красивым HTML-содержимым (с вложениями / изображениями)
  • И многое другое!

Мы покажем вам, как использовать модули Python, включая smtplib и электронную почту, с большим количеством примеров.

Если вы хотите отправлять электронные письма с помощью Python, этот учебник поможет вам пройти долгий путь!

Дальнейшее обучение: чтобы создавать отчеты с помощью Python в форматах Excel, HTML, PDF, ознакомьтесь с нашим руководством Как создавать отчеты с помощью Python.

Чтобы следовать этому руководству, вам необходимо знать следующее:

  • Основы Python, которые вы можете изучить с помощью нашего БЕСПЛАТНОГО ускоренного курса Python: знакомство с наукой о данных.
  • Основы HTML, которые вы можете получить в кратком обзоре HTML Introduction от W3 Schools.

Обзор отправки электронных писем с помощью Python

Прежде чем мы начнем, давайте рассмотрим инструменты для отправки электронных писем с помощью Python. Это зависит от форматов отправляемых вами электронных писем.

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

  • Обычный текст
    • smtplib : эта библиотека определяет объект сеанса клиента Simple Mail Transfer Protocol (SMTP), который можно использовать для отправки почты на любой Интернет-компьютер с демоном прослушивателя SMTP или ESMTP.
      Что такое SMTP? Это стандартный интернет-протокол связи для передачи электронной почты.
      Короче говоря, этот модуль smtplib позволяет Python использовать такой протокол для надежной и эффективной отправки электронных писем. Так что это базовая библиотека для отправки электронных писем с помощью Python.
    • ssl : этот модуль обеспечивает доступ к средствам шифрования Transport Layer Security (TLS, также известный как SSL) и одноранговой аутентификации для сетевых сокетов.
      Короче говоря, такой протокол делает связь по компьютерной сети более безопасной.
    • smtplib : для отправки электронных писем в формате HTML нам по-прежнему нужна smtplib .
    • ssl : для отправки электронных писем в формате HTML нам по-прежнему нужен ssl .
    • электронная почта: используйте модуль электронной почты, если мы хотим отправлять причудливые электронные письма.
      Эта библиотека упрощает управление сообщениями электронной почты. Нам не нужно знать все детали за кулисами при создании сложных электронных писем.
      Например, мы будем использовать модуль email.mime для добавления HTML и прикрепления документов к электронному письму. Подробнее о стандарте многоцелевых расширений почты Интернета (MIME) можно узнать здесь.

    К этому моменту вы можете быть перегружены всеми этими новыми терминами. Но не волнуйтесь, на примерах будет понятнее.

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

    Настройте новую учетную запись Gmail

    Для этого руководства мы создали новую учетную запись Gmail. На это есть несколько причин. Например, мы не хотим случайно раскрывать нашу регистрационную информацию. Кроме того, самый простой способ разрешить Python доступ к вашей учетной записи Gmail — изменить ее настройки безопасности.

    Поэтому хорошо иметь новую учетную запись для тестирования отправки электронных писем с помощью Python, прежде чем применять ее с помощью существующей учетной записи. После этапа разработки, если вы не хотите снижать настройки безопасности существующей учетной записи Gmail, вы можете найти решение в разделе Gmail API. А пока давайте создадим новую учетную запись Gmail, чтобы упростить задачу.

    Два этапа настройки тестовой учетной записи Gmail:

    Примечание. Несмотря на то, что в наших примерах мы используем Gmail, вы можете следовать аналогичным процедурам, используя других поставщиков почтовых услуг.
    Если вы работаете в крупной корпорации, у вас может не быть доступа к вашему SMTP-серверу. В этом случае вам необходимо обратиться за поддержкой к своему ИТ-отделу.

    Теперь у вас должна быть настроена тестовая учетная запись Gmail. Мы готовы отправлять электронные письма с помощью Python!

    Отправлять электронные письма с обычным текстом

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

    Отправьте свое первое электронное письмо с безопасным подключением к SMTP-серверу

    Чтобы отправлять электронные письма с помощью Python, нам необходимо безопасно подключиться к SMTP-серверу Gmail и отправить через него сообщение электронной почты.

    Ниже приведены подробности этой процедуры. Как упоминалось в обзоре, мы используем два модуля Python: smtplib и ssl.

    Комбинируя все, ниже приведен скрипт для отправки простого текстового сообщения электронной почты с использованием Python. Обязательно удалите свой пароль, если вы делитесь кодом с другими.

    После успешного запуска вы должны получить письмо в почтовый ящик получателя, как показано ниже.

    Поздравляем! Вы отправили свое первое электронное письмо с помощью Python.

    Если щелкнуть маленькую стрелку, чтобы развернуть сведения об электронном письме, вы увидите, что в системе безопасности указано стандартное шифрование (TLS). Это подтверждает, что мы отправили сообщение через защищенное соединение.

    Добавить нескольких получателей, Тему, Кому

    Как вы могли заметить, первое отправленное нами электронное письмо не имеет темы. Кроме того, поле «Кому», которое обычно показывает адрес электронной почты получателя, пусто. Мы можем добавить оба, изменив сообщение электронной почты. Кроме того, что, если мы хотим отправить на несколько адресов электронной почты? Давайте добавим и их.

    • Добавление нескольких получателей в виде списка
      Python будет отправлять электронные письма на все перечисленные адреса электронной почты. Но Python не будет автоматически отображать эти адреса в поле «Кому».
    • Добавление полей "Тема" и "Кому"
      У нас должны быть поля "Тема", "Кому" и сообщение электронной почты в отдельных строках. Поэтому, пожалуйста, определите f-строку как многострочную строку с тройными кавычками (''').
      Опять же, поскольку Python автоматически не показывает электронные письма получателей в поле «Кому», мы должны распечатать их вручную. Код ','.join(email_to) объединяет все электронные письма получателей, хранящиеся в email_to , используя строку запятой ( ,) в качестве разделителя. Таким образом, он возвращает строку [email protected],[email protected] , которая будет напечатана как поле «Кому» в электронном письме.

    После успешного запуска вы должны увидеть электронное письмо, как показано ниже, во всех почтовых ящиках получателей. И вы должны увидеть электронное письмо с Темой как «Текстовое электронное письмо» и полем «Кому» в качестве адресов получателей.

    Отправлять электронные письма в формате HTML с прикрепленными файлами

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

    Чтобы включить HTML-контент и вложения, мы будем использовать другой модуль Python, который называется электронной почтой. Точнее, мы будем использовать электронную почту. модуль mime для создания этих более причудливых электронных писем: стандартные электронные письма с многоцелевыми расширениями электронной почты (MIME).

    Общая процедура создания электронного письма MIME в наших примерах:

    1. Создайте класс MIMEMultipart
    2. Прикрепите к нему дополнительные классы MIME (например, MIMEText с сообщением электронной почты, MIMEApplication с вложениями)

    Давайте рассмотрим несколько примеров ниже.

    Отправить HTML-контент с помощью модуля email.mime

    HTML – это стандартный язык разметки веб-страниц. Таким образом, с помощью HTML можно сделать много контента и форматирования. Например, мы можем сделать текст заголовками, абзацами, полужирным или курсивом; мы также можем включать другие элементы HTML, такие как таблицы данных, изображения и т. д. С помощью HTML в качестве сообщения электронной почты мы можем отображать богатое информацией и хорошо структурированное содержимое.

    Ниже приведен пример электронного письма с базовым содержанием HTML:

    • Импорт модулей
      Помимо smtplib и ssl, нам также нужны некоторые функции для создания подклассов MIME из email.mime. Вы можете изучить различные классы MIME здесь.
      Мы также импортируем библиотеку pandas, поскольку хотим включить текущую дату в тему, что является необязательным для отправки электронных писем.
    • Определите документ HTML
      Мы включаем только простой документ с элементами h1 и p. Но вы можете включить и другие элементы, такие как table .
      Если вы переходите к учебнику Как создавать отчеты с помощью Python, вы можете попробовать отобразить созданный нами HTML-отчет, за исключением элемента img. Для отображения элемента img требуется дополнительная работа, которая скоро будет показана.
    • Настройте адреса электронной почты и пароль
      Обратите внимание, что вы также можете указать несколько получателей в качестве примера с обычным текстом.
    • Создайте класс MIMEMultipart и настройте поля "От", "Кому", "Тема"
      Обратите внимание, что модуль email.mime упрощает настройку полей "От", "Кому", "Тема". Нам не нужно помещать каждое поле в отдельную строку в строке сообщения. Вместо этого мы определяем их отдельно и более четко.
    • Прикрепите html-документ, определенный ранее, как тип контента MIMETexthtml к сообщению MIME
      Обратите внимание, что тип контента по умолчанию — «обычный», что не будет правильно отображать HTML-документ.
    • Преобразовать email_message в строку
    • Подключитесь к SMTP-серверу Gmail и отправьте электронное письмо так же, как и раньше

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

    Теперь, когда вы научились отправлять электронные письма в формате HTML с помощью Python, вы можете изменить HTML-документ, включив в него другие элементы, такие как таблица!

    Добавить вложения

    Помимо основного HTML-контента, мы часто также хотим включать вложения в сообщения электронной почты.

    Исходя из предыдущего примера, вы можете использовать приведенный ниже код для включения вложений в электронное письмо:

    • Добавить новый подкласс MIME для добавления вложений
      Мы можем использовать класс MIMEApplication для хранения вложений.
    • Определите функцию для прикрепления файлов в виде приложения MIMEA к электронному письму
      Поскольку добавление вложений сложно, лучше написать ее как функцию для повторного использования.
      Подробности см. в комментариях.
    • Прикрепите больше (документов) к электронному письму, применив функцию
      Мы прикрепляем три документа: 1 PNG, 1 Excel, 1 PDF.
      Можете попробовать прикрепить свои файлы. Пожалуйста, убедитесь, что они сохранены в текущем рабочем каталоге, если вы не хотите указывать путь.
      Если вы переходите из учебника Как создавать отчеты с помощью Python, теперь вы можете прикрепить диаграмму, Созданные нами отчеты в формате Excel и PDF.

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

    Добавить изображение в тело письма

    Что делать, если мы хотим включить диаграмму в наше сообщение электронной почты? Нам нужно включить его как элемент img в содержимое HTML. Но электронное письмо, отправленное с помощью Python, не отображает изображение без дополнительной обработки. Итак, в качестве последнего примера в этом руководстве мы отобразим изображение в сообщении электронной почты в формате HTML.

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

    • Добавьте элемент img с src в качестве cid (идентификатор контента) в качестве myimageid
      Вы можете установить для cid другие значения, если хотите.
    • В функцию добавления вложений добавьте еще один ввод extra_headers
      Этот ввод имеет значение по умолчанию «Нет»:
      – Если это «Нет», функция прикрепляет файл, как в предыдущем примере.
      – Если этот ввод не равен None, т. е. когда мы устанавливаем для него определенное значение, он добавит это значение extra_header в качестве заголовка к объекту, который можно использовать для установки cid для img
    • Применить функцию с extra_header к файлу chart.jpg
      Идентификатор содержимого myimageid совпадает с элементом img в html . Это отобразит файл chart.jpg в содержимом HTML.

    Если вы запустите код сейчас, вы должны получить электронное письмо, как показано ниже. Файл chart.jpg или диаграмма по вашему выбору отображается в содержимом HTML, а не в виде вложения.

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

    Надеюсь, теперь вы можете автоматизировать процесс отправки электронных писем с помощью Python!

    Помимо этих базовых модулей Python существуют также другие библиотеки или продукты, помогающие отправлять электронные письма с помощью Python. Например, вы можете проверить:

      : этот модуль предназначен, в частности, для Gmail, что значительно упрощает процесс. Но вы должны убедиться, что пакет обновлен на основе базовых модулей и Gmail: у этой службы есть бесплатный уровень. Но поскольку это управляемый сервис, вы должны ему доверять. : эта услуга предлагает 3 месяца бесплатной пробной версии. Но поскольку это управляемый сервис, вы должны ему доверять.

    Дальнейшее обучение: чтобы узнать о создании отчетов с помощью Python, ознакомьтесь со статьей Как создавать отчеты с помощью Python (3 формата/4 инструмента). Так что вы можете создавать отчеты, отправлять электронные письма, чтобы делиться отчетами, и то, и другое автоматически в Python!

    Мы будем рады услышать от вас. Оставляйте комментарии, если у вас есть вопросы или что-то еще.

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