ONETECH ASIA
ONETECH ASIA
今すぐ相談する
ContactinsightScanX
オフショア開発

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

Nguyen Tuan

15/12/2023

私たちはベトナムオフショア開発会社でAWS開発技術力とコスト対効果の高いシステム開発を提供しています。AWS開発実績が多いですが、今回は初心者向けAWSメール配信開発を紹介します。

はじめに

最近AWSサービスを使用して開発者が多いですが、はじめて開発者もいますので、色々分からないことがありますが、本日簡単にメール配信するのため、開発方法を共有したいと思います。まずAmazon SES(Simple Email Service)は、信頼性が高くスケーラブルなメール送信サービスです。今回の記事では、Laravel PHP フレームワークを使用して、Amazon SES サービスを利用したメール配信の実装手順を初心者向けに紹介します。Amazon SES を使用することで、メールの信頼性向上やスパムメールのフィルタリングが可能となります。

手順

Amazon SESの設定

最初にAWS SESサービスを使用するためにはAWSアカウントが必要です。この記事ではAWSアカウントの作成方法について下記のリンクをご参照ください。

https://beginaws.awsstudygroup.com/vi/1-account-setup/1-create-new-aws-account/

AWSアカウントを作成した後でAWSサービスを使用するのため、AWSページのログインページにログインする。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

リージョンを選択する。 ※注意:現在はAWS SESサービスを利用できるリージョンはN.Virginia 、Oregon、Irelandしかないです。最近、東京リジョン対応があり、SESサービスを利用いただけるようになりました。【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

これからSMTP Credentialを作成する必要があります。 下記の順番でメニューから選択する。

AWS SES Services →  Account dashboard →  Create SMTP credentials

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

その時にIAMユーザー作成画面が表示されます。

ユーザー名を入力して作成ボタンを押下とIAMユーザーを作成します。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

SMTPユーザーとパスワードが表示されますので、その情報を大切に保管してください。

下記の画面でDownload Credentialsボタンも押下するとログイン情報を保存する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

AWS SES Services →  Account dashboardへ遷移する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

ログイン情報を基づいてアプリケーションからメールへ接続できます。 ただし、メール誤送信防止のため、AWS SESのデフォルトはSandBoxにありますが、外にメールを送信できない。メール配信できるように解除する必要があります。

案①(本番稼働用):AWSへ依頼する。

案②(テスト用):メールドメインを追加して認証を行う。

下記の流れで選択していただければメール追加できます。

AWS SES Services →  Verified Identities → Create Identity

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

下記の画面が表示されます。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

認証したいメールアドレスを入力してCreate Identityを押下すると、一覧画面へ戻って認証中というステータスになります。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

入力したメールアドレスへログインするとAmazonから下記の確認メールが届きます。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

メールを開いて、認証リンクをクリックするとメール認証が完了となります。

下記のイメージサンプルを参照してください。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

メール認証が完了したら、AWSで下記の画面が表示されます。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

AWS SESでのVerified Identities画面からメール認証ステータスを確認できます。下記の画像をご参照ください。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順 テストのため、認証されたメールアドレスへは毎日200通まで送信できます。

Sandboxでの設定が完了すると、1日につき最大で5万通まで送信できるようになります。 設定した後でテストメールを送信してみます。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

テンプレートとメッセージのカスタマイズ

下記の手順でテストメールを設定します。

①Formattedを選択する。

②Scenario枠でCustomを選択する。

Custom Recipientテキストに認証したメールを入力する。

④Subjectテキストでテスト入力する。

⑤メール内容ボックスにテスト内容を入力する。

⑥SendMailボタンを押下するとメールを送信する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

下記の画面が表示されます。メール送信確認できました。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

認証したメールへテストメールが届いたかどうか確認します。設定した配信先のメールを確認する。【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

SENDMAILの最適化

Laravel内でSENDMAILを最適化するための手法や、Amazon SESを使って送信する際の効果的なコーディングについて具体例を挙げながら解説します。

1. MAIL_DRIVER=smtp

2. MAIL_HOST=host

3. MAIL_PORT=587

4. MAIL_USERNAME=username

5. MAIL_PASSWORD=password

6. MAIL_ENCRYPTION=tls

7. MAIL_FROM_ADDRESS=email_verify

8. MAIL_FROM_NAME=from_name

routes/web.phpでルートを追加する

Route::get('/test-sendmail', 'SendmailController@send');

次はcontroller とSendを作成する。

PROT8 PROT9

次はコマンドphp artisan serveを実行してserveを起動します。ブラウザ経由で127.0.0.1:8000/test-sendmailへアクセスします。 【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

メールボックスでLavarelで送信したメールは下記のメールが届いてます。 【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

この方法で、Amazon SESサービスを使用してLaravelでメールを送信できるようになりました。ただし、大量のメールを送信する際には、処理待ち時間を短縮するためにメールをキューに入れる必要があります。

メールトラキング

メール配信後トラキングのため、Configuration setsを作成する必要があります。下記の画面にて作成方法をご参照ください。

AWS SES Services → Configuration sets → Create set

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

①configuration setを選択

Create setボタンを押下する

作成が完了したら下記の画面が表示されます。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

作成したconfiguration setをクリックすると下記の画面が表示されます。Event destinationsタブをクリックしてAdd destinationボタンを押下する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

下記の画面でOpenをチェックしてNextを選択する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

次の画面が表示されます。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

Amazon SNSを選択する。

②名前を入力する。

Create SNS topicボタンをクリックする。

作成が完了したら⑤に選択する。

次の画面は表示されてAdd destinationを選択する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

SNS service (Simple Notification Service)へ遷移して検索ボックスで作成してTopicsを入力して検索する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

Create subscriptionをクリックする。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

作成画面が表示される。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

①セキュリティーのため、HTTPSを選択する。

②AmazonサービスでのEndpoint を利用します。メールを開く時にそのイベントをトリガーする。

Create subscriptionをクリックする。

作成したsubscriptionは認証中というステータスです。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

メールトラキング処理で下記のソースコードを追加してください。

PROT10

Confirm subscriptionイベントでメールが開く時にログへ吐き出せるようにする。PHP Laravelでの配下フォルダはstorage/logsへ保存します。

Responseは下記のフォマットとなります。

PROT11

 Confirm subscriptionを選択してSubscribeURLを入力する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

入力した後でConfirm subscriptionボタンを押下する。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

その時に、作成したメールトラキングは確認状態になります。

【初心者向け】Laravel PHP: Amazon SESを使ったメール配信実装の手順

ここまでメールを開く時にAmazonは設定したEndpointへ情報を送信します。

PROT12

AWSから$messageを返しますのでその内容はemail, userAgent, ipAddress, timestamp,…などがあります。詳細に関してやった時に確認してください。

\Mail::raw('Test content', function($message) use ($email, $subject, $mailer) { $message->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'SendEmail'); $message->from($mailer['from']); $message->to($email)->subject($subject); });

まとめ

今回詳細したPHP LaravelとAmazon SESの組み合わせを活かしてSENDMAILを向上させる手順とノウハウを紹介しました。この手順を通じて、プロジェクトのメールコミュニケーションに新たな可能性を開拓してください。

初めての方でもスムーズに実装できる手順となっていますので、ぜひお試しください。

お問い合わせ

AI・XR・建設DXに関するご相談、お見積もり、採用に関するご質問など、お気軽にお問い合わせください。