使用 Twilio SendGrid 從 Python Flask 應用程序發送電子郵件

已發表: 2020-06-30

確定是構建還是購買您的電子郵件基礎設施不是一個小決定。 您是否有足夠的帶寬來支持可交付性問題? 隨著你的成長,你能跟上你的發送嗎? 什麼更划算? 雖然有許多因素需要考慮,但這是另一個指南的對話(例如Build it 或 Buy It指南)。

相反,本教程將向您展示通過專用電子郵件服務發送電子郵件是多麼容易。 我們將介紹如何使用Flask框架和Flask-Mail擴展通過 Twilio SendGrid 傳遞電子郵件

教程工具

要遵循本教程,您需要以下項目:

  • Python 3.6 或更新版本。 如果您的操作系統不提供 Python 3.6+ 解釋器,您可以前往python.org下載安裝程序。
  • 免費的 Twilio SendGrid 帳戶。 如果您是 Twilio SendGrid 的新手,請註冊一個試用帳戶 使用試用帳戶,您可以在 30 天內發送 40,000 封電子郵件,然後每天發送 100 封電子郵件。

使用 SendGrid 進行設置

在您可以通過 SendGrid 發送電子郵件之前,您必須創建一個 API 密鑰,用於驗證對 SendGrid 服務的訪問。 登錄到您的 SendGrid 帳戶,然後單擊左側邊欄選擇“設置”,然後選擇API Keys 單擊“創建 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 應用程序

讓我們在app.py文件中構建一個入門 Flask 和 Flask-Mail 應用程序

在這裡,您可以看到如何正確配置 Flask-Mail 以使用 SendGrid 的 SMTP 服務。 重要的設置是:

  • 郵件服務器應該是`smtp.sendgrid.net`。
  • 郵件端口應該是 587。(你知道什麼時候使用哪個端口嗎?看看這篇博文。
  • 必須啟用 TLS。SSL 和 TLS有什麼區別?)
  • 需要進行身份驗證。 對於用戶名,您必須使用 `apikey`(所有 SendGrid 帳戶都一樣)。 密碼是您在上一節中創建的 SendGrid API 密鑰。

對於這個 Flask 應用程序,我們在 Flask-Mail 擴展的正確配置鍵中添加了上述設置。 出於安全原因,我們從名為“SENDGRID_API_KEY”的環境變量中導入了 API 密鑰。 我們還從環境變量中設置了默認的發件人電子郵件地址。 這是默認情況下將出現在所有電子郵件的“發件人”字段中的電子郵件地址。

使用兩個必需的變量創建一個.env文件:

Flask 會自動導入.env文件中定義的變量(只要你安裝了 python-dotenv 包),所以這足以讓這兩個變量進入 Flask 應用程序配置。

發送測試電子郵件

讓我們看看如何從 Python shell 給自己發送一封測試電子郵件:

請注意,我們使用 `flask shell` 命令啟動了 Python shell。 這將確保我們在app.py中構建的 Flask 應用程序被導入。

進入 shell 後,導入我們在 app.py 中創建的 `mail` 實例Flask-Mail 中的 `Message` 類:

接下來創建一個 `Message` 實例:

最後一步是發送此電子郵件:

就是這樣! 如果一切按計劃進行,電子郵件應該會在幾秒鐘內到達您的收件箱。

如果您想查看集成此功能的 Flask 路由示例,可以在app.py底部添加一個簡單的示例

要完成示例應用程序,您需要添加index.html模板文件。 首先為您的模板創建一個目錄:

然後在文件templates/index.html中寫入以下內容

運行測試應用程序:

然後在 Web 瀏覽器中導航到http://localhost:5000以訪問該應用程序。

您現在可以輸入收件人電子郵件地址,當您單擊按鈕時,一封測試電子郵件將發送到該地址。

解決交付問題

通過使用上面的 Flask 應用程序,您應該可以成功發送電子郵件。 但是,您的電子郵件有可能無法送達。 由於 SendGrid 異步發送電子郵件,大多數傳遞錯誤發生在發件人完成他們一方的事務之後,因此您的應用程序不會有任何指示出現錯誤。 如果發生這種情況,則很可能電子郵件被收件人的電子郵件服務器拒絕。

幸運的是,如果您通過發送我們所描述的電子郵件遇到這種情況,您可以使用 Twilio SendGrid 儀表板來幫助您調試發生的事情。 SendGrid 儀表板中,單擊Activity ,然後單擊頁面中間的“顯示所有活動”按鈕。 這將向您顯示您嘗試發送的所有電子郵件的列表,指示它們是否已成功發送。

您可以在上圖中看到發送到 example.com 地址的電子郵件未能送達。 對於任何未送達的電子郵件,您可以單擊該電子郵件以查看詳細信息,包括收件人電子郵件服務器發送的任何錯誤響應。

一旦確定了電子郵件未發送的原因,就有多種方法可以解決這些交付問題。 如果您在電子郵件中看到許多拼寫錯誤(例如@yaho.com 或@gmal.com),可能值得探索一個電子郵件驗證工具來捕獲您的電子郵件聯繫人列表中的任何常見拼寫錯誤。

還有許多其他問題可能導致發送失敗,包括發送信譽不佳或 IP 地址被阻止。 在我們的2020 年電子郵件送達率指南中了解有關電子郵件送達率的所有信息

結論

從教程中可以看出,Twilio SendGrid 輕鬆集成到啟動 Flask 電子郵件發送工作流中,使發送電子郵件成為一項簡單的任務。

如果您現在想知道如何在 Python 中接收來自 Flask 框架的電子郵件,不用擔心,我們已經為您服務! 查看這篇文章:如何使用 Flask Framework for Python 接收電子郵件

而且,有關如何與 Twilio SendGrid 集成或通過我們的 API 發送的更多資源,請查看我們的知識中心