※当ブログではアフィリエイト広告を利用しています。
Amazon Web Serviceのサービスの一つにAmazon SES(Simple Email Service)という大規模メール配信用サービスがあります。
SMTPを使ったメール送信の他に、多くのプログラミング言語用に用意されているSDKを使ってのメール送信が可能とのことなのでiOS用のSDKを使ってiPhoneからメール送信してみました。その方法をまとめます。
Amazon SESとは
Amazonが提供するメール配信用のクラウドサービスです。Eメールを1,000通当たり$0.10と転送量による課金だけで安価に大量に送信することができます。
公式サイトによる説明は以下の通りです。
Amazon Simple Email Service(Amazon SES)は、企業や開発者のための、非常に拡張性が高くコスト効率の良いトランザクションバルクメール送信サービスです。Amazon SES により、社内でEメールソリューションを構築したり、サードパーティのEメールサービスをライセンス、インストール、または操作したりする煩雑さやコストから解放されます。
AWS SDK for iOSを使ってのメール送信
通常のメール送信のようにSMTPを設定してメール送信することもできますが、多くのプログラミング言語から使うことができるAWS SDK(開発キット)を使ってのメール送信も可能です。
以下にAWS SDK for iOS(Objective-C)を使ってのメール送信方法を画像つき手順でご紹介します。
1.AWS側の設定
はじめにAmazon SESとIAM(Identity and Access Management)の設定を行います。
1-1.Amazon SESの設定
Amazon SESは初期状態ではsandboxモードとなっており、許可したメールアドレスにしかメールを送信できません。sandboxでも少量のメール送信は可能なので、今回はsandboxモードでメールアドレスを許可する手順からスタートします。
Amazon SESマネジメントコンソール左側のメニューより「Verified Senders」の「Email Addresses」を開き、「Verify a New Email Address」ボタンをクリックします。
送信元としての使用を許可するメールアドレスを入力します。サンドボックスモードではここで許可したメールアドレスにのみメールが送信できます。今回は許可するメールアドレスを一つだけ登録します(送信元・送信先アドレスが同じになります)
メールアドレスを入力して「Verify This Email Address」ボタンを押すと登録したアドレスに「Amazon SES Address Verification Request」という件名のメールが届きます。メール中のリンクをクリックすると、登録したメールアドレスでの送信と受信が可能になります。
今回は許可するメールアドレスを指定しましたが、この他にドメインに所定のTXTレコードを設定することでドメイン単位でのメール送信許可を設定することも可能なようです。
1-2.IAMでメール送信用ユーザの作成
SDKを使ってAmazon SESでメール送信するためには認証用のアクセスキーとシークレットキーが必要です。IAM(Identity and Access Management)でメール送信用のAWSユーザを作成します。
IAMマネジメントコンソールの「Users」を開き、「Create New Users」ボタンを押します。
任意のユーザ名を入力し、「Generate an access key for each user」にチェックを入れた状態で「Create」ボタンを押します。
ユーザ作成が完了するとアクセスキーとシークレットキーが生成されます。画面表示されたものをコピーするか「Download Credencials」ボタンから認証情報をダウンロードします。
※シークレットキーはここで保存しておかないと再度表示できません。紛失した場合はアクセスキーを新しく登録することとなります。
作成したユーザにSESへのアクセスを許可するポリシーを設定するため、IAMのユーザ一覧に戻ります。
作成したユーザを選択し、「Permissions」タブの「Attach User Policy」ボタンを押します。
ポリシーの一覧から「Amazon SES Full Access」の「Select」ボタンを押します。
JSON形式のポリシードキュメントが表示されるため「Apply Policy」ボタンを押します。
以上でメール送信用のSESとIAMの設定は完了です。
ちなみにSESマネジメントコンソールの「SMTP Settings」で「Create My SMTP Credentials」からユーザを作成できますが、ここから作成したユーザにはSMTPからメール送信するための権限しか与えられないためAWS SDKからのメール送信はできません。
2.iOSアプリ側(XCode)の設定とコーディング
iOSからのメール送信するためのXCodeの設定とコーディングを行います。
2-1.SDKのインポート
AWS SDK for iOSをダウンロードします。
ダウンロードしたzipアーカイブを解凍し、AWSRuntime.framework
とAWSSES.framework
をXCodeプロジェクトにドラッグして追加します。
2-2.SDKを使用してコーディング
AWSRuntime/AWSRuntime.h
とAWSSES/AWSSES.h
を#import
し、コーディングを行います。
以下は任意のViewControllerで任意のボタンを押下したときメールを送信するサンプルです。
ACCESS_KEY
,SECRET_KEY
,FROM_ADDRESS
,TO_ADDRESS
は「1.AWS側の設定」で設定したものに置き換えて下さい。
#import "ViewController.h" #import <AWSRuntime/AWSRuntime.h> #import <AWSSES/AWSSES.h> #define ACCESS_KEY @"YOUR_ACCESS_KEY" #define SECRET_KEY @"YOUR_SECRET_KEY" #define FROM_ADDRESS @"you@example.com" #define TO_ADDRESS @"you@example.com" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)sendEmailWithSES:(id)sender { [self sendMailWithSES]; } - (void)sendMailWithSES { AmazonSESClient *sesClient = [[AmazonSESClient alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY]; //件名の情報 SESContent *subject = [[SESContent alloc] init]; subject.data = [NSString stringWithFormat: @"%@", @"件名です"]; //本文の情報 SESContent *messageBody = [[SESContent alloc] init]; messageBody.data = [NSString stringWithFormat: @"%@", @"本文です"]; SESBody *body = [[SESBody alloc] init]; body.text = messageBody; SESMessage *message = [[SESMessage alloc] init]; message.subject = subject; message.body = body; //送信先の情報 SESDestination *destination = [[SESDestination alloc] init]; [destination.toAddresses addObject:TO_ADDRESS]; SESSendEmailRequest *ser = [[SESSendEmailRequest alloc] init]; ser.source = FROM_ADDRESS; //送信元アドレス ser.destination = destination; //送信先の情報 ser.message = message; //メッセージの情報 @try { //sendEmail でメール送信 SESSendEmailResponse *response = [sesClient sendEmail:ser]; NSLog(@"%@",[response description]); } @catch (AmazonServiceException *exception) { //例外があればこちらへ NSLog(@"%@",[exception message]); } } @end
上記プログラムからメール送信したところ問題なく送信できました。ちなみにgmailではamazonses.com経由であることが表示されます。
おわりに
iOSではアプリからメールを送信する場合、標準メーラーを起動して送信する方法が一般的かと思いますが、Amazon SESとAWS SDK for iOSを使えばバックグラウンドでのメール送信も出来そうです。
SDKはiOSからも手軽に使えるため、AWSの他のサービスについてもSDKを使って利用してみたくなりました。