前回の記事、「Amazon SESでメール配信を行う」では、Amazon SESのコントロールパネル上からメールを送信する方法をご紹介しました。今回は自社のWebシステムなどの外部からAmazon SESを利用してメールを送信する方法をご紹介したいと思います。
AWS SDK for PHPをダウンロードする
SESを利用する場合、ゼロから作る必要はありません。SDK(Software Development Kit)といって、簡単にAWS(SESはAWSが提供するサービスの1つ)を使えるようにするためのツールがAmazonから提供されているので、それをダウンロードして利用します。(ダウンロードはこちらから)
少し気をつけることがあります。上記のリンクに行くと、AWS SDK for PHP2という新しいバージョンもあるのですが、2013年6月10日の時点では、最新版にはまだSESを利用するAPIが提供されていなかったので、旧版を利用してください。
ダウンロードしたSDKの準備
ダウンロードしたsdk-latest.zipを解凍すると、解凍したフォルダの中にsdk-1.6.2というフォルダがあります。このフォルダを丸ごとコピーして、フォルダの名前をAWSSDKforPHPと変更しておいてください。(名前はなんでもいいんですが、分かりやすい名前にしてください。)また、解凍したフォルダの中にあるファイルconfig-sample.inc.phpは名前を変更して、config.inc.phpにしてください。フォルダの中身は下の画像のファイルとフォルダだけ残して、後は削除して構いません。
そして、名前を変更したconfig.inc.phpを開いて、keyとsecretの設定を行います。keyとsecretの値はAWSのSecurity Credentialsを選択すると見ることができます。
Yor Security Credentialsの「Access Keys」を開くと、Access Key IDという欄があるので、それがkeyの値です。以前はsecretはクリックすれば見れたのですが、現在はCreate New Root Keyというボタンを押して新しくAccess Keyを作成した時に、CSVファイル(rootkey.csv)がダウンロードされ、その中にkeyとsecretが書いています。まだAccess Keyを作ったことがなければ、新規作成してください。
取得したkeyとsecretはconfig.inc.phpに以下のように書いてください。
CFCredentials::set(array( // Credentials for the development environment. 'development' => array( // Amazon Web Services Key. Found in the AWS Security Credentials. You can also pass // this value as the first parameter to a service constructor. 'key' => 'ここにkeyを書く', // Amazon Web Services Secret Key. Found in the AWS Security Credentials. You can also // pass this value as the second parameter to a service constructor. 'secret' => 'ここにsecretを書く', ~~以下、省略~~
PHPでプログラムを作る
では、実際にPHPでプログラムを作ることにします。先ほどのSDKのフォルダと同じところに、今回はSendMail.phpというファイルを作ります。
このSendMail.phpの中身は以下のようになります。
<?php /** * ================================================================= * SendMail.php * Amason SES メール送信スクリプト * ================================================================= */ // SDKインクルード require_once('AWSSDKforPHP/sdk.class.php'); require_once('AWSSDKforPHP/services/ses.class.php'); // Amazon SESのインスタンス生成 $ses = new AmazonSES(); // 送信元メールアドレス // ※AWSで認証済みのアドレスを設定(前回の記事参照) $mail_from_addr = 'sender@isket.jp'; // 宛先のメールアドレス // amazonのリファレンスによると、宛先は1つずつが送信するのが望ましいとのこと $mail_to_addr = array('ToAddresses' => array( 'sample@isket.jp'), ); // 件名と本文 $message = array( 'Subject' => array( 'Data' => '件名', 'Charset' => 'ISO-2022-JP', ), 'Body' => array( 'Text' => array( 'Data' => '本文', 'Charset' => 'ISO-2022-JP', ), ), ); // エラー時の返信メール先 $opt = array( 'ReturnPath' => 'error@isket.jp' ); // SESでメール送信 $res = $ses->send_email($mail_from_addr , $mail_to_addr , $message, $opt); // 応答 if ($res->isOK()) { echo 'success'; } else { echo 'failure'; }
PHPでメールを送信する場合も、送信元は認証済みのメールアドレスからしかメールを送信することはできません。宛先に関してはsandboxの場合は認証済みの宛先にしか送れませんが、production申請が完了していれば自由に宛先は設定することができます。
Amazon SESを利用してメールを送信するシリーズで3回記事を書きましたが、メールは無事に送れるようになったでしょうか?
- 投稿タグ
- Amazon SES, AWS, PHP, メール配信