Django 使用 AWS SES 發信
分類
說明
AWS Simple Email Service (SES) 可以讓你發送 Email
本篇使用 Django 實作聯絡我們表單,當表單送出後
接著使用 SES 發信通知自己
Django 聯絡我們表單
關於 Django 實作聯絡我們,請參考 Django 實作 聯絡我們
AWS IMA User
建立一個使用者,讓 Django 可以透過這個使用者使用 SES
使用者需要開啟 AmazonSESFullAccess 權限
建立方式請參考 AWS IAM 建立 API 專用的使用者
記得要儲存 Access key id 和 secret access key
這個等等要在 Django 配置使用
驗證 SES 身份
本篇示範使用 domain 寄信到 gmail 信箱
驗證 Domain 身份
進入 SES
按 Create identity 按鈕
Identity type 選擇 Domain
輸入你的 Domain 名稱
按 Create identity 按鈕
左側選擇 Configuration > Verified Identities
選擇你剛剛建立的 domain 身份
在 Authentication 標籤打開 Publish DNS records
將這些 CNAME 資料複製到你的 DNS 記錄,證明你是 Domain 擁有者
詳細步驟請參考 網域更新 DNS 記錄
驗證 Email address 身份
因為 SES 預設在沙盒模式,沙盒模式中只能寄給驗證過的 Email
所以先把要寄的 Email 驗證過
步驟跟驗證 Domain 一樣
差異在 Identity type 選擇 Email address
並且輸入你的 Email
完成後,你會在剛剛輸入的 Email 收到一封信,打開那封信確認要授權給 aws ses
確認
當你在 Verified identities 看到都驗證完成後就可以接著下一步了
配置 Django 使用 SES
安裝插件
這個插件是用來讓 Django 使用 SES
終端
$ pip install django-ses
把 IAM 使用者的 access key id 和 secret access key 貼在下面
settings.py
# 這是本機測試用的
# EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# 使用 SES
EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_ACCESS_KEY_ID = 'YOUR-ACCESS-KEY-ID'
AWS_SECRET_ACCESS_KEY = 'YOUR-SECRET-ACCESS-KEY'
# 設定 SES 的區域 ex: us-east-2
AWS_SES_REGION_NAME = 'REGION-NAME'
# 設定 email 端點 ex: email.us-east-2.amazonaws.com
AWS_SES_REGION_ENDPOINT ='REGION-ENDPOINT'
更新寄信的信箱位址
更新 views 上寄信和收信的地址,原本輸入的是假地址
domain 信箱帳號地址你可自己指定
例如: admin@your_domain.com
將 from_email
和 recipient_list
輸入正確的 email 位址
views.py
# 略
def contact(request: HttpRequest) -> HttpResponse:
# 略
try:
send_mail(
subject=subject,
message='',
html_message=rendered_email,
from_email='admin@your_domain.com',
recipient_list=['mygmail@gmail.com']
)
except BadHeaderError:
return HttpResponse('Invalid header found.')
# 略
測試
最後在自己測試寄一封信,確認信箱有收到信
請留意信有可能在推銷郵件或者垃圾郵件中
如果不在主要信件區的話,可以再自行把信改成主要信件
參考
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!