# 前言
你好, 我是不學會死的後端工程師, Ray
本篇記錄如何使用 Laravel 與 AWS SES 來發送 email
版本: Laravel 8
# 申請 SES (Simple Email Service) 服務
# 驗證 Email
SES Service 在剛使用時, 會處於 SandBox 狀態, 在此狀態下, 除了會有每日發送 email 數量以及頻率的限制之外, 所有收件方都必須經過驗證, 因此先將自己的信箱輸入, 接著會收到確認信, 點擊確認後該信箱就可以作為之後測試用了
到 AWS SES 主控台, 左方 Email Addresses, 然後進去點選 verify a new email address 進行驗證
# 建立擁有 SES 權限的 IAM User
要使用 Laravel 存取 SES 服務, 必須要有相對應的身份以及權限才行, 這樣 AWS 才知道你是誰, 用超過才可以跟你收錢
所以需要建立一個擁有 (SES Full Access) 的 IAM 使用者
- 新增使用者
命名使用者, 並只勾選程式設計方式存取即可, 因為該 IAM User 並不需要登入
從現有政策中, 賦予該 IAM User SES Full Access
在建立 User 後, 下載 Access ID 以及 Access Secret, 之後設定 Laravel env 檔時會用到
# 申請移出沙盒
提交‘移出沙盒’申請, 約24小時內會解封。否則寄信數量跟頻率都會被很大程度上限制住, 且任何收件人都必須要經過AWS驗證。
在沙盒內時, 各方面會受到限制
申請移出沙盒, 不過需要經過審查, 有越來越嚴格的趨向 QQ
若審核成功, 會變成 Production Enabled 的狀態
# Laravel 專案
# 套件安裝
composer require guzzlehttp/guzzle |
# .env 設定
MAIL_MAILER=ses |
# 測試
這邊採用 php artisan tinker
來測試
php artisan tinker; |
# 碰到的問題
當串接金流時, 使用 ngrok 來測試, 在收到金流服務商的 callback 時, 只要執行到發送 mail 的地方就報錯, 錯誤訊息如下:
"message": "Expected response code 250 but got code \"530\", with message \"530 5.7.1 Authentication required\r\n\"", |
後來使用 valet share
, 就不會有這個問題, 原本是使用 php artisan serve --port=myPort
, 然後 ngrok http myport
雖然最後問題解決了, 但原因未明, 若有高人知曉, 希望可以給個學習機會。
留言