1.sendRawEmailコマンドで添付ファイル付きメールを送る方法
先日AWS cli sesを使用してlinuxのシェルでjson形式を使用して
メールを送る処理を書く機会がありました。
そのときsendRawEmailで添付ファイルを送る方法が書かれていないので
何かの役に立てばと思い残します。
2.基本の解説(ヘッダ)
ヘッダとはFromやToなどの要素のことを示します。
3.基本の構文の説明
ヘッダは改行区切りのテキスト(文字)形式で「項目名: 値¥m」という記法で設定を列挙します。
良い例
From:[メールアドレス]¥nTo:[メールアドレス]¥nSubject:[メールタイトル]¥n
と書きます。
このとき改行をせずに改行文字を入れてください。
悪い例
From:[メールアドレス]
To:[メールアドレス]
Subject:[メールタイトル]
4.添付ファイルの記載方法
まず、例を示してから解説をします。
例
aws ses send-raw-email --raw-message "{\"Data\":\"From: [送信元メールアドレス]\nTo: [送信先メールアドレス]\nCc: [CC欄メールアドレス]\nSubject: [メールタイトル]\nMIME-Version: 1.0\nContent-type: multipart/mixed; boundary=\"a-random-boundary\"\n--a-random-boundary\nContent-Type: text/plain; charset=\"UTF-8\\\"\n[本文]\n--a-random-boundary\nContent-Type: application/octet-stream; name=\\\"[ファイル名]\\\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment\n[ファイルの中身]\n--a-random-boundary--\"}"
解説
\"Data\" :
一番最初に書く
以下のメール内容(Fromから下の内容)は¥"¥"で囲む
From: [送信元メールアドレス]
[送信元メールアドレス]にはメールアドレスを書く
To: [送信先メールアドレス]
[送信先メールアドレス]にはメールアドレスを書く
Cc: [CC欄メールアドレス]
[CC欄メールアドレス]にはメールアドレスを書く
Subject: [メールタイトル]
[メールタイトル]にはメールタイトルを書く
メールタイトルに空白が含まれる場合は¥"¥"で囲む
MIME-Version: 1.0
MINEのバージョン宣言
Content-Type: multipart/mixed;
「multipart」タイプは複合データを表し、複数のデータの組み合わせを一度に伝送したい場合に用いる。「mixed」サブタイプは連結されたデータの形式やデータ間の関連性について特に何も示さず、単に複数のデータが連結されていることのみを表している。
boundary=¥\"a-random-boundary¥\"
バウンダリの文字列を指定
パートの境界は、「バウンダリ:boundary」と呼ばれる任意の文字列の行で示される。
--a-random-boundary
バウンダリ文字列で一つのパートの開始を表す
Content-Type: text/plain;text/plain
テキストファイルを送るときのContent-Type
charset=¥\"UTF-8¥\"
文字コードの指定
[本文]
本文を記載する
空白が含まれる場合は¥"¥"で囲む
--a-random-boundary --
バウンダリ文字列で二つ目のパートの開始を表す
Content-Type: application/octet-stream;
電子メールの添付ファイルでファイルの種別を表すのに用いられるMIMEタイプの一つ
name= [ファイル名]
ファイル名を指定する
ファイル名に空白が含まれる場合は¥"¥"で囲む
Content-Transfer-Encoding: base64
[ファイルの中身]のエンコード形式の指定
この場合はbase64を指定しているContent-Transfer-Encoding: base64
Content-Disposition: attachment
ファイルをダウンロードできることを示す
[ファイルの中身]
ファイルの中身を記載する
に空白が含まれる場合は¥"¥"で囲む
--a-random-boundary--
バウンダリ文字列のパートの終了を示す
[送信ファイルの中身]はContent-Transfer-Encodingで指定した
方法でデコードする必要がある。
以下にbase64のエンコード指定したときを示します。
デコード例
[デコードしたファイルの中身]=$(base64 -w 0 "ファイルの名前")
5.注意点
json形式では送れない文字があります。
その場合以下のようにエスケープする必要があります。
送れない文字 | 読み方 |
---|---|
¥” | ダブルクォーテーション |
¥\ | バックスラッシュ |
¥/ | スラッシュ |
¥b | バックスペース |
¥f | 改ページ |
¥r | ラインフィード |
¥n | 改行・キャリジリターン |
¥t | タブ |
¥uXXXX | 4桁の16進数で表記されたUnicode文字 |
6.締め
コピペOKですのでコマンドを使用してメールを送ってみてください!