Отправка электронных писем из приложений Python Flask с помощью Twilio SendGrid
Опубликовано: 2020-06-30Принятие решения о том, строить или покупать инфраструктуру электронной почты, является непростым решением. Есть ли у вас пропускная способность для решения проблем с доставкой? Сможете ли вы не отставать от отправки по мере роста? Что более рентабельно? Хотя есть ряд факторов, которые следует учитывать, это разговор для другого руководства (например, этого руководства « Создай или купи » ).
Вместо этого этот учебник покажет вам, как легко отправлять электронную почту через специальную службу электронной почты. Мы рассмотрим, как доставлять электронную почту через Twilio SendGrid, используя платформу Flask и расширение Flask-Mail .
Учебные инструменты
Чтобы следовать этому руководству, вам понадобятся следующие предметы:
- Python 3.6 или новее. Если ваша операционная система не предоставляет интерпретатор Python 3.6+, вы можете перейти на python.org , чтобы загрузить установщик.
- Бесплатная учетная запись Twilio SendGrid. Если вы новичок в Twilio SendGrid, зарегистрируйте пробную учетную запись . С пробной учетной записью вы можете отправлять 40 000 электронных писем в течение 30 дней, а затем 100 электронных писем в день навсегда.
Настройка с помощью SendGrid
Прежде чем вы сможете отправлять электронную почту через SendGrid, вам необходимо создать ключ API, который вы будете использовать для аутентификации доступа к службам SendGrid. Войдите в свою учетную запись SendGrid, затем нажмите на левой боковой панели, выберите «Настройки», а затем « Ключи API » . Нажмите «Создать ключ API».
Дайте вашему API-ключу понятное имя (сохраняйте его простым и понятным, чтобы вы помнили, к чему оно относится!). Для этого урока мы выбрали имя Flask-Mail . Мы выбрали «Полный доступ» для разрешений, что дает ключу возможность выполнять все необходимые функции отправки электронной почты (доступ к конечным точкам GET, PATCH, PUT, DELETE и POST). Если вы предпочитаете создать ключ с очень конкретными разрешениями, выберите «Ограниченный доступ» и настройте свой доступ по мере необходимости.
Когда вы нажмете кнопку «Создать и просмотреть», вам будет представлен ваш ключ. Этот ключ больше никогда не будет отображаться, поэтому вам нужно нажать на него, чтобы скопировать в буфер обмена. Затем вставьте его в защищенный документ, чтобы вы могли использовать его позже. Если вы потеряете свой ключ, вам нужно будет сгенерировать новый. После того, как вы сохранили свой ключ, вы можете нажать кнопку «Готово».
Создание среды Python
Теперь, когда мы завершили настройку, мы можем углубиться в то, как отправлять электронную почту из приложений Python Flask. Мы начнем с создания на вашем компьютере нового каталога с именем *twilio-sendgrid-tests* (или что-то подобное), а затем создадим в нем новую виртуальную среду Python.
Для пользователей Mac и Unix команды следующие:
Для пользователей Windows команды следующие:
Затем установите Flask, Flask-Mail и python-dotenv в вашей виртуальной среде:
Настройка приложения Flask
Давайте создадим стартовое приложение Flask и Flask-Mail в файле app.py :
Здесь вы можете увидеть, как правильно настроить Flask-Mail для использования службы SMTP SendGrid. Важными настройками являются:
- Почтовый сервер должен быть smtp.sendgrid.net.
- Почтовый порт должен быть 587. (Знаете ли вы, какие порты и когда использовать? Прочтите этот пост в блоге. )
- TLS должен быть включен. (В чем разница между SSL и TLS ?)
- Требуется аутентификация. В качестве имени пользователя вы должны использовать apikey (одинаково для всех учетных записей SendGrid). Пароль — это ключ API SendGrid, который вы создали в предыдущем разделе.
Для этого приложения Flask мы добавили вышеуказанные настройки в соответствующие ключи конфигурации для расширения Flask-Mail. По соображениям безопасности мы импортировали ключ API из переменной среды с именем `SENDGRID_API_KEY`. Мы также устанавливаем адрес электронной почты отправителя по умолчанию из переменной среды. Это адрес электронной почты, который по умолчанию будет отображаться в поле «От» всех электронных писем.
Создайте файл .env с двумя обязательными переменными:
Flask автоматически импортирует переменные, определенные в файле .env (если у вас установлен пакет python-dotenv), поэтому этого достаточно, чтобы добавить эти две переменные в конфигурацию приложения Flask.
Отправка тестового письма
Давайте посмотрим, как вы можете отправить себе тестовое письмо из оболочки Python:
Обратите внимание, что мы запустили оболочку Python с помощью команды «flask shell». Это обеспечит импорт приложения Flask, которое мы создали в app.py.
Оказавшись в оболочке, импортируйте экземпляр `mail`, который мы создали в app.py , и класс `Message` из Flask-Mail:
Затем создайте экземпляр `Message`:
Последний шаг — отправить это письмо:
Вот и все! Если все пойдет по плану, электронное письмо должно прийти в ваш почтовый ящик всего через несколько секунд.
Если вы хотите увидеть пример маршрута Flask, который интегрирует эту функциональность, вот простой пример, который вы можете добавить внизу app.py :
Чтобы завершить пример приложения, вам нужно добавить файл шаблона index.html . Сначала создайте каталог для ваших шаблонов:
А затем напишите следующее содержимое в файле templates/index.html :
Запустите тестовое приложение с помощью:
Затем перейдите по адресу http://localhost:5000 в веб-браузере, чтобы получить доступ к приложению.
Теперь вы можете ввести адрес электронной почты получателя, и когда вы нажмете кнопку, на этот адрес будет отправлено тестовое письмо.
Устранение неполадок с доставкой
Используя вышеприведенное приложение Flask, вы должны успешно отправлять электронные письма. Однако есть вероятность, что ваши электронные письма не будут доставлены. Поскольку SendGrid отправляет электронные письма асинхронно, большинство ошибок доставки возникает после того, как отправитель завершает свою часть транзакции, поэтому ваше приложение не будет иметь никаких признаков того, что произошла ошибка. Если это произойдет, то, вероятно, электронное письмо было отклонено почтовым сервером получателя.
К счастью, если вы столкнулись с этим, отправив электронное письмо, как мы описали, вы можете использовать панель инструментов Twilio SendGrid, чтобы помочь вам отладить то, что произошло. На панели инструментов SendGrid нажмите « Активность », а затем кнопку «Показать всю активность» в середине страницы. Это покажет вам список всех писем, которые вы пытались отправить, с указанием того, были ли они успешно доставлены или нет.
На изображении выше видно, что электронное письмо, отправленное на адрес example.com, не было доставлено. Для любых сообщений электронной почты, которые не были доставлены, вы можете щелкнуть по электронному письму, чтобы просмотреть подробную информацию, включая любые ответы об ошибках, отправленные почтовым сервером получателя.
Как только вы определите, почему ваши электронные письма не отправляются, есть несколько способов решить эти проблемы с доставкой. Если вы видите ряд орфографических ошибок в электронных письмах (например, @yaho.com или @gmal.com), возможно, стоит изучить инструмент проверки электронной почты, чтобы выявить любые распространенные орфографические ошибки в вашем списке контактов электронной почты.
Есть много других проблем, которые могут привести к сбою доставки, в том числе плохая репутация отправки или заблокированный IP-адрес. Узнайте все о доставляемости электронной почты в нашем Руководстве по доставляемости электронной почты на 2020 год .
Заключение
Как видно из руководства, Twilio SendGrid легко интегрируется в начальный рабочий процесс отправки электронной почты Flask, что делает отправку электронной почты простой задачей.
Если вам сейчас интересно, как вы получаете электронные письма от Flask Framework в Python, не беспокойтесь, мы вас обеспечим! Ознакомьтесь с этой статьей: Как получать электронные письма с помощью Flask Framework для Python .
Дополнительные ресурсы по интеграции с Twilio SendGrid или отправке через наши API см. в нашем Центре знаний .