AWSの環境をパワーアップ、の手順、のうち、
SESを使ってEC2からPHPでメール送信、の記事です。
こちらの記事を参考にしました。
https://qiita.com/tanakaworld/items/94f1ba66801100f6a44f
ドメインの検証
ドメイン(当サイトでいうと、codecreare.com)に対して、”ドメイン検証”の手順を実施します。
上記サイトと違う手順で実施したのが、リージョンは”米国東部 (バージニア北部)”を選択した事と、”Use Route 53 ボタン”ボタン押下時に、”Email Receiving Record”にもチェックを入れて押下した事。
”AWS IAM 設定”、”権限作成”まで、手順通りに実施。
PHP用モジュールインストール
ここからはPHPの対応になります。
こちらに説明があるのですが、足りないところを不足しながら進めます。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-php.html
PHPはver7.3.6を入れてます。
事前準備として、GitHubからphp用のAWS-SDKをDLします。
https://github.com/aws/aws-sdk-php/releases
2019/8/14時点では、Version 3.109.3が最新でした。
DLして解凍し、このようなイメージで格納しています。 pharファイルも格納するのを忘れないように。

作成するPHPファイル
作成するphpファイルとしては、3つのファイル構成で実現しています。
- SendMail.php SDKを利用して送信する送信実処理
- SecretPass.php 上記の、IAMで作成した、”Access Key Id”、”Secret Access Key”、を取得するだけの関数。
- SendMail_Debug.php 送信実処理をコールするだけのデバッグ処理。
下部に、それぞれのファイルの内容を記載しておきます。
作業用のWindowsPCからPHP(XAMPP環境)でSendMai_Debug.phpを実行すると、”送信先メールアドレス”へ届きました。
mbstring設定
ただ、Linuxに同じファイルをコピーして実行すると、mb_convert_encodingでエラーが発生・・・。
yum install php-mbstring
https://www.javadrive.jp/php/install/index8.html
を参考に、下記の通り設定。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = Off
あと、mbstringと関係ないけど、下記もついでに設定
date.timezone=Asia/Tokyo
mbstringのextension有効化で、下記を追記したら、already loadedというエラーが発生するようになったので、追加せず。
extension=mbstring
AWS上のPHPからメール送信できた!
作成したソース
下記のようなフォルダ構成になっています。
親フォルダ └Function └SendMail └SendMail.php └SendMail_Debug.php └Pass └SecretPass.php └lib └aws └aws_3_109_3 (上記インストール(格納)したファイルとフォルダ) └Aws └GuzzleHttp ・ ・ ・
SendMail.php
<?php require_once '../../lib/aws/aws_3_109_3/aws.phar'; require_once '../../Function/Pass/SecretPass.php'; use Aws\Ses\SesClient as SesClient; use Aws\Ses\Exception\SesException as SesException; use Aws\Credentials\Credentials; function MAIL_SendMail($dest, $subject, $msg) { $keys = SEC_GetSesIamData(); $credentials = new Credentials($keys['access_key'], $keys['secret_key']); $source = 'noreply@codecreare.com'; $charset = 'ISO-2022-JP'; $client_data['credentials'] = $credentials; $client_data['region'] = 'us-east-1'; $client_data['version'] = '2010-12-01'; $client = SesClient::factory($client_data); $destdata['ToAddresses'] = array($dest); $destdata['CcAddresses'] = array(); $destdata['BccAddresses'] = array(); $subjects['Data'] = $subject; $subjects['Charset'] = $charset; $body_txt['Data'] = $msg; $body_txt['Charset'] = $charset; $bodydata['Text'] = $body_txt; // $body_html['Data'] = 'HTML'; // $body_html['Charset'] = $charset; // $bodydata['Html'] = $body_html; $msgdata['Subject'] = $subjects; $msgdata['Body'] = $bodydata; $maildata['Source'] = $source; $maildata['Destination'] = $destdata; $maildata['Message'] = $msgdata; $result = $client->sendEmail($maildata); } ?>
SecretPass.php
<?php function SEC_GetSesIamData() { $keys['access_key'] = '**************'; $keys['secret_key'] = '**************'; return $keys; } ?>
SendMail_Debug.php
<?php require_once '../../Function/SendMail/SendMail.php'; DEBUG_Main(); function DEBUG_Main() { MAIL_SendMail('******@gmail.com', 'Title of Debug Mail', 'Debug Send Msg'); } ?>
コメント