怎麼在 Laravel 中, 利用 AWS SES 發郵件?

# 前言

你好, 我是不學會死的後端工程師, 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
composer require aws/aws-sdk-php

# .env 設定

MAIL_MAILER=ses
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=發送方信箱
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=yourAwsAccessId
AWS_SECRET_ACCESS_KEY=yourAwsAccessSecret
AWS_DEFAULT_REGION=yourAwsDefaultRegion

# 測試

這邊採用 php artisan tinker 來測試

php artisan tinker;

// 輸入
Mail::send('welcome', [], function($message) {
$message->to('receiverEmail')->subject('Testing mails');
});

# 碰到的問題

當串接金流時, 使用 ngrok 來測試, 在收到金流服務商的 callback 時, 只要執行到發送 mail 的地方就報錯, 錯誤訊息如下:

"message": "Expected response code 250 but got code \"530\", with message \"530 5.7.1 Authentication required\r\n\"",
"exception": "Swift_TransportException",
"file": "/Users/ray/code/FacebookOptimizedSellingSystem/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php",
"line": 457,
"trace": [

後來使用 valet share, 就不會有這個問題, 原本是使用 php artisan serve --port=myPort, 然後 ngrok http myport

雖然最後問題解決了, 但原因未明, 若有高人知曉, 希望可以給個學習機會。

Laravel - Digging Deeper - Mail (官方文件原子化翻譯筆記) Laravel - 部署

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×