Amazon SESで添付ファイル付きメールを送る

aws-640-428px

こんにちは。CICの丸山です。
今回はAWS JavaScript SDKを使い、SESで添付ファイル付きメールを送る方法について解説します。

 

Amazon SESとは?

SESとはSimple Email Serviceの略称で、様々な種類のメールを送ることができるサービスです。

AWS上で起こった事象をメールで通知する方法としては、SNSのSubscriptionでEmailを選択することでメール通知を行うこともできますが、添付ファイル付きでメールを送りたい場合には、SESを使う必要があります。

SESを使い始めるに当たりいくつか注意事項がありますが、まず知っておかなければならないのが、”サンドボックス(初期状態)”と”プロダクション”という2つのアクセスレベルがある点です。
初めてSESを使う時は、”サンドボックス”状態になっており、以下の制約があります。

  • 確認済み(Verify済み)アドレスにのみ送信可能
  • 24時間で200通まで送信可能
  • 最大1通/秒の送信レート

送信先に制限をなくす場合や、より多くのメールを配信したい場合にはAWSに申請を行う必要があります。

また、現状ではSESのアルゴリズムが日本国内の携帯キャリアの制限等に十分配慮した構造となっておらず、メールが届かない等の問題が発生する可能性があるため、携帯キャリアメールに送信したい場合には、注意する必要があります。

 

SESの初期設定(メールアドレスを登録)

SESでメールを送信する方法は、SDK等から直接SESのサービスを呼び出してメール送信する場合と、SMTPエンドポイントを使う場合の2パターンがありますが、今回はSDKから呼び出す方法とご紹介します。

SandBox環境のまま検証を行いますので、まず送信元、送信先のアドレスの登録を行います。

1. SESの管理コンソールで、Email Addressesを選択

#4_01_sesConsole

2. [Verify a New Email Address]をクリック

#4_02_sesEmailAddress

3. メールアドレスを入力し、[Verify This Email Address]をクリック

#4_03_verifyNewEmailAddress

4. 手順3で入力したアドレス宛に、確認のメールが届くので、本文に記載されているリンクをクリックしてVerifyする

#4_04_verifyMessage

 

添付ファイルのないメールをSESで送信する

今回はJavaScript SDK (Node.js SDK)を使うため、まずAPIドキュメントを確認してみると、メールを送信するために用意されたメソッドは、sendEmailとsendRawEmailという2つが用意されていることが分かります。

APIドキュメント:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SES.html

 

sendEmailはAPIドキュメントに記載されているように、sendEmailを呼び出す際に必要なパラメータを渡すことで、簡単にメール送信をすることができます。このパラメータ名もわかりやすいので、あまり困ることはないと思います。
以下にSESを使ったメール送信を行うNode.jsのサンプルコードを掲載します。

7行目と11行目の「送信元メールアドレス」、「宛先メールアドレス」部分は、SESに登録したメールアドレスで置き換えてください。

Charsetは文字コードを指定している部分で、利用する目的や環境によって変更してください。
日本語のメールを送信したい場合には、JIS(ISO-2022-JP)がよく使われているようです。

 

添付ファイルのあるメールをSESで送信する

SESで送信するメールに添付ファイルを含めたい場合には、sendRawEmailというメソッドを使用します。
APIドキュメントを確認してみると、以下のような記載になっています。

#4_05_sendRawEmailExample

sendEmailの際には、本文を記載する場合にMessageという属性の中に、SubjectとBodyがあり、そこにメッセージを指定するだけでしたので分かりやすかったですが、こちらのsendRawEmailの場合には、RawMessageという属性が用意されていますが、中身の書き方は明記されていません。

というのも、このsendRawEmailは標準で用意されたフォーマット(sendEmailメソッド)よりも、より詳細な設定を行いたい場合に使用するもののため、汎用性は高いですがぱっと見は分かりにくくなっています。

公式ドキュメントにも以下のように記載があります。

Amazon SES による E メールの構成方法と送信方法について、自動フォーマットよりも詳細な制御を行う必要がある場合があります。その場合には、Amazon SES raw Eメールインターフェイスを使用することにより、E メールヘッダーと MIME の種類を指定して、高度にカスタマイズされたメッセージを受取人に送信できます。

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-email-raw.html

 

MIMEの規格や書き方を分かっている人にとっては難しくないでしょうが、ゼロから学習するのには時間がかかってしまいますので、npmで用意されているモジュールを使うことで、今回の目的である”添付ファイル付きのメールをSESで送る”が実現できます。

npmを検索するとわかると思いますが、様々なモジュールが用意されています。
その中でも今回はmailcomposerというものを使いたいと思います。

mailcomposer : https://www.npmjs.com/package/mailcomposer

 

このモジュールを使うと、添付ファイル付きのメッセージをBuffer型で出力することができるので、先ほどのsendRawEmailのRawMessageに渡すデータを簡単に作ることができます。
mailcomposerのドキュメントを見るとわかりますが、メッセージを作成する際に渡すパラメータ(From, To, Subject等)も分かりやすい表現になっています。

以下に、テキストファイルを添付したメールをSESで送信する、Node.jsのサンプルコードを示します。

詳しくは、mailcomposerのドキュメントを参照して頂ければと思いますが、既存ファイルの保存場所を指定してメッセージを送信することもできますので、必要に応じて使い分けてください。

ファイル添付する場合の、Amazon SESが対応していない形式もありますのでご注意ください。

対応していないファイル形式は以下のドキュメントで確認することができます。

サポート対象外の添付ファイルの種類 :
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/mime-types.html

 

今回はAWS SDK for JavaScript(Node.js)を使って、SESで添付ファイル付きのメールを送る方法をご紹介しました。

Pocket

コメント