Amazon SESを使う場合、サーバ側にアクセスキーIDとシークレットアクセスキーを設定しておく必要があるのですが、レンタルサーバ―の場合それが難しいことがあります。
今回はレンタルサーバーでも使えるようにiniファイル認証を使ってAmazon SESをPHPを使ってメール送信するプログラムを紹介します。
ちなみに今回のプログラムは、レンタルサーバーの「エックスサーバー」でメールが送信されることを確認済です。
コーディング前の下準備
テスト用のメールアドレスを登録・認証させる
Amazon SESはテスト段階のSandBoxモードでは、事前に認証してあるメールアドレスしか利用することができません。
なので事前にメールアドレスを認証しておきます。
まずは、AWSのコンソール画面にログイン。
ログインできたら、サービス一覧から「Simple Email Service」を選択します。
Simple Email Serviceの画面が表示されたら、サイドメニューの「Email Addresses」をクリックします。
登録されているEmail一覧が表示されるので、「Verify a New Email Address」と書かれたボタンをクリックしましょう。
メールアドレス登録用モーダルが表示されるので、メールアドレスを入力して「Verify This Email Address」と書かれたボタンをクリックしましょう。
登録したメールアドレスに認証用のURLが記載されたメールが送信されるので、URLをクリックしたら認証完了です。
[box class=”red_box” title=”注意”]
今回は、送信元メールアドレスと、送信先メールアドレスの2つのメールアドレスを登録します。[/box]
権限付与とアクセスキーIDとシークレットアクセスキーを取得
Amazon SESをAPI経由で利用するには、”権限の付与”と”アクセスキーIDとシークレットアクセスキーを取得”する必要があります。
まずはサービス一覧から「IAM」をクリックします。
IAMの画面が表示されたら、サイドメニューから「ユーザー」をクリックします。
ユーザー一覧が表示されるので、「ユーザーを追加」をクリックします。
適当なユーザー名を入力し、「プログラムによるアクセス」のチェックボックスにチェックしたら「次のステップ:アクセス権限」のボタンをクリックします。
「既存のポリシーを直接アタッチ」をクリックするとポリシーの一覧が表示されるので、検索ボックスで「AmazonSESFullAccess」と入力し、表示されたポリシーをチェックします。
ポリシーのチェックができたら、「次のステップ:タグ」ボタンをクリックします。
以降は登録完了まで特に設定せずに「次のステップ」ボタンをクリックしていけばOKです。
ユーザーの登録が完了すると、アクセスキーIDとシークレットアクセスキーが表示されるので、必ず控えておきましょう。
AWS SDK for PHPを取得
Amazon SESをPHPで使うためにAWS SDK for PHPをインストールします。
Composerを利用したインストール方法が一番簡単です。
Composerがインストール済の場合は、コマンドラインで以下のコマンドを実行して少し待てばAWS SDK for PHPインストール完了です。
composer require aws/aws-sdk-php
[box class=”blue_box” title=”Composerが使えない場合”]
ちなみに、今回はComposerが使えないレンタルサーバーでの利用も想定しているので、公式サイトからZipファイルでAWS SDK for PHPをダウンロードしました。
ダウンロードしたzipファイルを展開して、ディレクトリに配置してオートローダーをインクルードすれば使えるようになります。
[/box]
iniファイル作成
今回は、レンタルサーバーでも利用できるようにiniファイルを利用してAmazon SESをPHPで実行させます。
サーバーの適当な場所にiniファイルを作成します。(今回はtest.iniとしました)
ファイルを作成したら、下記のコードを記述してください。
[default] #今回はdefaultと設定 aws_access_key_id = アクセスキーID aws_secret_access_key = シークレットアクセスキー
コーディング
コード
公式サイトの「AWS SDK for PHP を使用して E メールを送信する」で公開されているソースを参考にしてコーディングします。
send.phpを作成し、下記のコードを記述します。
// AWS SDK for PHPをインクルード include_once 'aws/aws-autoloader.php'; use Aws\Credentials\CredentialProvider; use Aws\Ses\SesClient; use Aws\Exception\AwsException; // iniファイルで設定した[]のテキストを設定 // 今回はdefault $profile = 'default'; // iniファイルのパス $path = 'test.ini'; // iniファイルでの認証するための処理 $provider = CredentialProvider::ini($profile, $path); $provider = CredentialProvider::memoize($provider); // SES用オブジェクト生成 $client = new SesClient([ 'region' => 'us-west-2', 'version' => '2010-12-01', 'credentials' => $provider ]); // 送信元メールアドレス $from_email = 'sample_from@sample.co.jp'; //送信者名表示 $from_name = mb_encode_mimeheader("サンプル太郎",'utf-8')." <{$from_email}>"; // 送信先メールアドレス $to_email = 'sample_to@sample.co.jp'; // メール件名 $subject = 'テストメール'; // メール本文 $plaintext_body = 'テストメール本文ですよ'; // 文字コード $char_set = 'UTF-8'; try { // メール送信 $result = $client->sendEmail([ 'Destination' => [ 'ToAddresses' => [$to_email], ], 'ReplyToAddresses' => [$from_email], 'Source' => $from_name, 'Message' => [ 'Body' => [ 'Text' => [ 'Charset' => $char_set, 'Data' => $plaintext_body, ], ], 'Subject' => [ 'Charset' => $char_set, 'Data' => $subject, ], ], ]); $messageId = $result['MessageId']; echo("送信成功! Message ID: $messageId" . "\n"); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo("送信に失敗しました:" . $e->getAwsErrorMessage() . "\n"); echo "\n"; }
あとは、このphpファイルにアクセスすればメールが送信されます。
コメント