配信メール登録

送信するメールの文面を登録する。

1度のリクエストで最大1000通の配信メールを登録することが出来る。

リクエスト

エンドポイント

/v1/mails

HTTPメソッド

POST  もしくは  PUT

リクエストボディ

JSON形式であること

リクエスト
要素名
要素数
制限
説明
envelopes Envelope型の配列 1:1000   宛先メールアドレスごとのメタデータの配列
from メールアドレス型 1   Fromヘッダの値
reply_to メールアドレス型 0:1   Reply-Toヘッダの値
subject 文字列 1 最大1024文字, UTF-8のみ 制御文字不可 Subjectヘッダの値
body Body型 1

以下のいずれかの方式でエンコードされていること

  • Quoted-Printable
  • Base64
メール本文
attachment Attachment型の配列 0:32   添付ファイル
custom_args キー文字列・値文字列のハッシュ 0:100

キー文字列最大256文字, 半角英数字  =@-+*#%_!?~  のみ
値文字列 UTF-8のみ 制御文字不可
合計バイト数 10KB以内

メール1件ごとに保持する独自データ
headers キー文字列・値文字列のハッシュ 0:*

キー文字列最大64文字, 半角英数字,  :  を除く半角記号のみ
値文字列最大1024文字, 半角記号・半角英数字・半角空白のみ
合計バイト数 10KB以内
以下のヘッダ名は大文字・小文字に関係なく使用できない
dkim-signature subject from to message-id cc bcc
mime-version content-type content-transfer-encoding
x-mta-tenant x-mta-sender-key x-mta-identifier
x-mta-transaction-id

カスタムメールヘッダ
replace_value キー文字列・値のハッシュ 0:100

キー文字列最大64文字, 半角英数字  =@-+*#%_!?~  のみ
値文字列最大1024文字, UTF-8のみ 改行コードを除く制御文字不可
合計バイト数 10KB以内

差し込み変換用データ
以下の項目で使用可能
body.text body.html
以下の項目でも使用可能だが改行が含まれていた場合半角空白に置換される
from.name reply_to.name subject
envelopes.*.from.name envelopes.*.reply_to.name envelopes.*.subject
改行は LF もしくは CRLF を使用すること
※ LF は自動的に CRLF に変換される

timestamp 数値 0:1

0~2147483647
現在時刻のunix timestampから+86400*14以内
※ 現在時刻から14日間以内

送信時刻
batch_id 文字列 0:1 最大32文字, 半角アルファベット・半角数字文字列のみ 複数のメールを1配信として扱うための文字列
tracking トラッキング設定 0:1  

メール文面中のリンク及びHTMLパートのビーコン画像によるトラッキング設定
本文から抽出可能なURLの数は、TEXTパート、HTMLパートそれぞれ100個まで
文面の先頭から数えて100種類までのURLがトラッキングURLに置換される

dkim DKIM署名設定 0:1  

メールに署名するDKIMのセレクタを指定するための設定

defer_limit 数値 0:1 0~20

一時配送エラー時のメール再送試行回数を指定するための設定
メール配信設定で設定できる再送回数の設定より優先して設定される
この値を指定しない場合、メール配信設定で設定できる再送回数分だけ再送される

この値を指定する場合の詳細な挙動についてはメール配信設定更新の項目を参照すること

Envelope
要素名
要素数
制限
説明
to メールアドレス型 1 1APIコールでto,cc,bcc合計で1000アドレス以内 宛先アドレス
cc メールアドレス型の配列 0:100 1APIコールでto,cc,bcc合計で1000アドレス以内 CCアドレス
bcc メールアドレス型の配列 0:100 1APIコールでto,cc,bcc合計で1000アドレス以内 BCCアドレス
from メールアドレス型 0:1   Fromヘッダの値
上階層のfromより優先して設定される
reply_to メールアドレス型 0:1   Reply-Toヘッダの値
上階層のReply-Toより優先して設定される
subject 文字列 0:1 最大2048文字, UTF-8のみ 制御文字不可

Subjectヘッダ
上階層のsubjectより優先して設定される

headers キー文字列・値文字列のハッシュ 0:*

キー文字列最大64文字, 半角英数字,  :  を除く半角記号のみ
値文字列最大1024文字, 半角記号・半角英数字・半角空白のみ
合計バイト数 10KB以内
以下のヘッダ名は大文字・小文字に関係なく使用できない
dkim-signature subject from to message-id cc bcc
mime-version content-type content-transfer-encoding
x-mta-tenant x-mta-sender-key x-mta-identifier
x-mta-transaction-id

カスタムメールヘッダ
上階層のheadersに英字の大文字・小文字を無視した同名の項目が存在する場合、この設定が優先される

replace_value キー文字列・値文字列のハッシュ 0:100

キー文字列最大64文字, 半角英数字 =@-+*#%_!?~  のみ
値文字列最大1024文字 UTF-8のみ 改行コードを除く制御文字不可
合計バイト数 10KB以内

差し込み変換用データ
上階層のreplace_valueに同一名の項目が存在する場合、この設定が優先される
以下の項目で使用可能
body.text body.html
以下の項目でも使用可能だが改行が含まれていた場合半角空白に置換される
from.name reply_to.name subject envelopes.*.subject
改行は LF もしくは CRLF を使用すること
※ LF は自動的に CRLF に変換される

custom_args キー文字列・値文字列のハッシュ 0:100

キー文字列最大256文字, 半角英数字  =@-+*#%_!?~  のみ
値文字列 UTF-8のみ 制御文字不可
合計バイト数 10KB以内

宛先メールアドレスごとに保持する独自データ
上階層のcustom_argsに同一名の項目が存在する場合、この設定が優先される

tracking 宛先別トラッキング設定 0:1  

宛先別のトラッキング設定
大元のtrackingの有効無効に関わらず入力値の検証が実行される

dkim DKIM署名設定 0:1  

メールに署名するDKIMのセレクタを指定するための設定
上階層のdkimより優先して設定される

メールアドレス
要素名
要素数
制限
説明
address 文字列 1 EMAILアドレス形式の文字列であること, 最大256文字

メールアドレス

RFC 準拠のメールアドレスを許容(ただし、アドレスリテラル形式を除く)
上記に加え、ローカルパート中でピリオドが連続する場合、ピリオドがローカルパート先頭及び末尾に存在する場合も許容
上記に該当しないメールアドレスに関しては予告なく送信できなくなる可能性がある

name 文字列 0:1 最大64文字, UTF-8のみ 制御文字不可 メールアドレスの名称パート
Body
要素名
要素数
制限
説明
text 文字列 0:1

textもしくはhtmlのどちらかが必要
UTF-8のみ
HTMLパート、テキストパートと添付ファイルのコンテンツサイズの合計が10MB以内
改行コードで分割される1行の長さが最大10000文字以内

テキストパート文面
改行は LF もしくは CRLF を使用すること
※ LF は自動的に CRLF に変換される
※ 差し込みによってコンテンツサイズ上限を超過するとシステムが判断した場合、その旨を記載したエラーを返す
※ 差し込みによって1行が10000文字を超過する行が存在するとシステムが判断した場合、その旨を記載したエラーを返す

html 文字列 0:1

textもしくはhtmlのどちらかが必要
UTF-8のみ
HTMLパート、テキストパートと添付ファイルのコンテンツサイズの合計が10MB以内
改行コードで分割される1行の長さが最大10000文字以内

HTMLパート文面
改行は LF もしくは CRLF を使用すること
※ LF は自動的に CRLF に変換される
※ 差し込みによってコンテンツサイズ上限を超過するとシステムが判断した場合、その旨を記載したエラーを返す
※ 差し込みによって1行が10000文字を超過する行が存在するとシステムが判断した場合、その旨を記載したエラーを返す

Attachment
要素名
要素数
制限
説明
content 文字列 1

半角英数字  +/_-=  のみ
メール本文のHTMLパート、テキストパートとコンテンツサイズの合計が10MB以内

base64エンコード済みのファイルのバイナリ
name 文字列 1 最大78文字, UTF-8のみ ファイル名
type 文字列 1 最大255文字, 半角英数字  _-.!#$%&+/  のみ MIMEタイプ
disposition 文字列 0:1 inline  もしくは  attachment 添付ファイルの表示方法
content_id 文字列 0:1 最大256文字, 半角英数字  !$&*-=^`|#%'+/?_{}~@".  のみ メール本文でファイルを参照するためのID
トラッキング
要素名
要素数
制限
説明
tracking 文字列 1 may  又は  must  のみ有効

トラッキングを有効にするフラグ
may  サーバ障害などが原因でトラッキングURLが取得できなかった場合に文面生成を続行する
must  トラッキングURLが取得できなかった場合は文面生成を中止する

beacon boolean 0:1  

メール開封確認用の、HTMLパートにビーコン画像を付与するためのフラグ
このフラグを  true  にした状態でHTMLパートが存在しない場合は無視される

expires トラッキング有効期限の配列 0:1   トラッキングするURLの有効期限設定
custom_domain 文字列 0:1

半角英数字  .-  最大253文字
ドメイン形式の文字列であること

トラッキングURLに使用するドメイン

※ 利用の際は下記「カスタムドメイン設定」を確認すること。必要な準備を行わず設定した場合トラッキング機能が正常に動作しない。

relay キー文字列・値文字列のハッシュ 0:1

キー 半角英数字記号 最大64文字 値 半角英数字記号 最大2048文字
要素数 1個まで

トラッキングURLから元URLにリダイレクトする際に経由させるURL設定

replace_url 文字列の配列 0:100 半角英数字記号 最大2048文字
URL形式の文字列であること
本文に含まれるURLのうち、配列中に含まれるURLのみをトラッキングURLに置換する
この項目が存在しない場合or空配列の場合、本文に含まれる全てのURLをトラッキングURLに置換する
トラッキング有効期限
要素名
要素数
制限
説明
url 文字列 1 半角英数字記号 最大2048文字

有効期限を設定するURL
URL形式か、  beacon  という文字列である必要がある
beacon を指定した場合、beaconの有効期限を設定することになる

timestamp 数値 1 32bit整数値の範囲内

有効期限を示す日時のunixタイムスタンプ秒
現在時刻から31日後までである必要がある
現在以前もしくは31日後より後を指定した場合、自動で31日後に上書きされる

redirect 文字列 1 半角英数字記号 最大2048文字

有効期限が切れた場合にリダイレクトするURL
urlで beacon  を指定した場合に限り、指定の必要がない(無視される)

宛先別トラッキング設定
要素名
要素数
制限
説明
label1 文字列 0:1 半角英数字 最大64文字 結果取得時の抽出用ラベル1
label2 文字列 0:1 半角英数字 最大64文字 結果取得時の抽出用ラベル2
label3 文字列 0:1 半角英数字 最大64文字 結果取得時の抽出用ラベル3
query キー文字列・値文字列のハッシュ 0:1

キー半角英数字記号 最大64文字、値半角英数字 最大2048文字
要素数 10個まで

トラッキングURLから元URLにリダイレクトする際にクエリパラメータとして付与する設定

DKIM署名
要素名
要素数
制限
説明
selector 文字列 1 半角英数字 -(ハイフン) .(ピリオド) _(アンダーバー)  最大63文字まで

DKIM署名のセレクター
ドメインはfromで指定したアドレスのドメインが対象となる

リクエストボディ サンプル

{
  "envelopes": [
  {
    "to": {"name":"宛先", "address": "to@example.net"},
    "cc": [{"name":"CC宛先", "address": "cc@example.net"}],
    "bcc": [{"name":"BCC宛先", "address": "bcc@example.net"}],
    "subject": "個別サブジェクト",
    "headers": {
      "x-sample": "overwrite-root-headers-value"
    },
    "replace_value": {
      "#REPLACE#": "こちらが優先して置換されます",
      "#SUBJECT#": "こちらが優先して置換されます",
      "#FROM#": "こちらが優先して置換されます",
      "#REPLY-TO#": "こちらが優先して置換されます"
    },
    "custom_args": {
      "user_id": "00001"
    },
    "tracking": {
      "query": {
        "user_id": "1234",
        "email": "to@example.net"
      }
    }
  }
],
  "from": {"address": "from@exmaple.net", "name": "差出人 #FROM#"},
  "reply_to": {"address": "reply@example.net", "name": "返信先 #REPLY-TO#"},
  "subject": "サンプルメール #SUBJECT#",
  "body": {
    "text": "これはテキストパートです\n#REPLACE#",
    "html": "<p>これは<strong>HTML</strong>パートです<br/>#REPLACE#<br/><img src=\"cid:dot@example.net\"/></p>"
  },
  "attachment": [
    {
      "content": "R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=",
      "name": "ドット.gif",
      "type": "image/gif",
      "dispostion": "inline",
      "content_id": "dot@example.net"
    }
  ],
  "custom_args": {
    "user_id": "00000"
  },
  "headers": {
    "x-sample": "sample"
  },
  "replace_value": {
    "#REPLACE#": "置換されます",
    "#SUBJECT#": "Subjectが置換されます",
    "#FROM#": "Fromが置換されます",
    "#REPLY-TO#": "Reply-Toが置換されます"
  },
  "timestamp": 1514732400,
  "batch_id": "IDA001",
  "tracking": {
    "tracking": "may",
    "beacon": true,
    "expires": [
      {
        "url":"https://example.com",
        "timestamp": 1546182000,
        "redirect": "https://example.org"
      }
    ],
    "custom_domain": "click.mydomain.org",
    "relay": {"r":"https://example.jp"}
  },
  "dkim": {
    "selector": "myselector"
  }
}

レスポンス

ステータスコード
状態
コード
成功 200
リクエストボディがjsonではない 400
jsonリクエストのバリデーションエラー 400
認証失敗 401
存在しないエンドポイント 404
許可されていないHTTPメソッド 405
システムエラーが発生した 500
システムが一時的にサービスを提供できない状態になっている 503
システムのタイムアウト 504
レスポンスボディ
成功

{"code":200}

失敗

{"code":400,"error":"validation error", "validation_errors":"subject required"}

 

共通設定と宛先別設定

custom_args headers replace_value subject  は全宛先共通の設定と  envelopes.*  で設定する宛先別設定が存在する。

いずれの設定も共通設定と宛先別設定で同名の項目があった場合、宛先別設定が優先する。

headers  に限り名前の同一判定において大文字・小文字が無視される。

リクエスト

{
  ...
  "from": {"address":"from@example.com"}
  "subject":"root subject",
  "headers":{"x-header":"root"},
  "custom_args":{"arg1":"root"},
  "replace_value":{"#R#","root"},
  "envelopes": [
    {
      "to": {"address":"to@example.com"},
      "subject":"envelope subject #R#",
      "headers":{"X-HEADER":"envelope"},
      "custom_args":{"arg1","envelope"},
      "replace_value":{"#R#","envelope"}
    }
  ],
  "body":{"text":"body #R#"},
  ...
}

送信されるメール文面

メールヘッダ:
From: <from@example.com>
To: <to@example.com>
Subject: envelope subject envelope
X-HEADER: envelope

メール本文:
body envelope

通知されるwebhook

{
  "mta_mail_id":"9999999999",
  "email":"to@example.com",
  "timestamp":1507785394,
  "custom_args":{"arg1":"envelope"},
  "event":"Delivered",
  "batch_id":"sample."
}

差し込み置換

replace_value envelopes.*.replace_value  に対象文字列と置換後の文字列を設定することで、

body.html body.text subject from.name reply_to.name envelopes.*.subject  の対象文字列を置換することができる。

replace_value envelopes.*.replace_value  に同名の置換対象文字列が存在する場合、宛先別設定である  envelopes.*.replace_value  が優先する。

また、置換後の文字列に改行が含まれていて  subject from.name reply_to.name  に差し込んだ場合、改行が半角空白に変換される。

リクエスト

...
"replace_value":{"#REPLACE0#":"これはrootの0です","#REPLACE1#":"これはrootの1です"},
"from":{"address":"from@example.com":"name":"#REPLACE1#"},
"reply_to":{"address":"reply@example.com":"name":"#REPLACE0#"},
"body":{"text":"#REPLACE0#,#REPLACE1#,#REPLACE2#"},
"subject":"#REPLACE2#",
"envelopes":[
  {
    "to":{"address":"to@example.com"},
    "replace_value":{"#REPLACE1":"これはenvelopeの1です","#REPLACE2#":"改行前\n改行後"},
    "subject":"#REPLACE1#"
  }
],
...

送信されるメール文面

メールヘッダ:
From: "これはenvelopeの1です" <from@example.com>
To: <to@example.com>
Reply-To: "これはrootの0です" <reply@example.com>
Subject: 改行前 改行後

メール本文:
これはrootの0です,これはenvelopeの1です,改行前
改行後

#REPLACE0#  は共通設定しか存在しないため、「これはrootの0です」となり、

#REPLACE1#  はenvelopes.0に宛先別設定が存在するためenvelopes.0宛てのメールでは「これはenvelopeの1です」となる。

#REPLACE2#  は共通設定には存在せず、envelopes.0にのみ存在するため、envelopes.0宛てのメールでは「改行前<CR><LF>改行後」となる。

メール送信に必要な入力項目

最低限メール送信に必要な入力項目とメール送信可能となる条件は以下となる。

  • subject  にバリデーションエラーにならない文字列が設定されている
  • from.address  にバリデーションエラーにならないメールアドレスが設定されている
  • body.text  もしくは  body.html  にバリデーションエラーにならない文字列が設定されている
  • envelopes.*.to.address  にバリデーションエラーにならないメールアドレスが設定されている

リクエスト

{
  "subject": "this is minimum request",
  "from": {"address":"from@example.com"},
  "body": {"text": "minimum request body."},
  "envelopes": [
    {"to":{"address":"to@example.com"}}
  ]
}

購読解除リンクの表示に必要なヘッダの指定

List-UnsubscribeおよびList-Unsubscribe-Postヘッダを付与することで、RFC8058の要件「The List-Unsubscribe and List-Unsubscribe-Post headers MUST be covered by the signature and included in the "h=" tag of a valid DKIM-Signature header field.」をクリアしたメールを送信できる。

リクエスト

{
  "subject": "サブジェクト",
  "from": {"address": "from@example.com"},
  "envelopes": [
    {"to": {"address": "to@example.com"}}
  ],
  "headers": {
    "List-Unsubscribe-Post": "List-Unsubscribe=One-Click",
    "List-Unsubscribe": "<https://example.com/r?store_id=1>,<mailto:notify@example.com>"
  },
  "body": {
    "text": "これはテキストパートです",
    "html": "これはHTMLパートです"
  }
}

送信されるメールのヘッダ

From: <from@example.com>
To: <to@example.com>
Subject: サブジェクト
...
DKIM-Signature: ... ; h=From:To:Subject:Message-Id:List-Unsubscribe:List-Unsubscribe-Post; ...
List-Unsubscribe: <https://example.com/r?store_id=1>,<mailto:notify@example.com>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
...

トラッキングURLの有効化

トラッキングURLの設定を有効にすると、テキストパート及びHTMLパート文面中のURLがトラッキングURLに置換して送信される。

テキストパートではURL文字列を置換し、HTMLパートではAタグのhref属性の文字列をトラッキングURLに置換する。

また、トラッキング設定内の  beacon  項目を有効することでHTMLパート文面にHTMLメール  開封  確認用のビーコン画像が追加される。

テキストパート

API時の文面リクエスト

サンプルメールです
https://example.org

送信される文面(URLのxおよびyの部分はランダム)

サンプルメールです
https://tracking.autobahn.email/v2/r/xxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

HTMLパート

API時の文面リクエスト

<html>
  <body>
    <p>
      サンプルメールです<br>
      <br>
      <a href="https://example.org">リンク</a><br>
      <span>https://example.com</span>
    </p>
  </body>
</html>

送信される文面(URLのxおよびyの部分はランダム)

<html>
  <body>
    <p>
      サンプルメールです<br>
      <br>
      <a href="https://tracking.autobahn.email/v2/r/xxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy">リンク</a><br>
      <span>https://example.com</span>
    </p>
    <img src="https://tracking.autobahn.email/v2/b/xxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"/>
  </body>
</html>

抽出用設定

各トラッキングURL及び開封ビーコンURLには、自動的にメールIDとバッチIDが付与される。

このため、トラッキング・開封結果取得APIでメールIDまたはバッチIDを指定した場合、該当のデータのみ取得することができる。

また、宛先別トラッキング設定の label1 label2 label3 に任意の文字列を設定することで、特定のラベルのトラッキング結果の抽出が可能。

カスタムドメイン設定

トラッキング用URLのドメインは tracking.autobahn.email (試用環境は tracking-dev.autobahn.email )だが、トラッキング設定内の custom_domain にドメインを指定することで、トラッキング用URLのドメインを変更することができる。

ただし、下記の事前準備が必要となる。個別対応となるため、事前にトライコーンの担当営業と協議を行うこと。

  • CNAMEレコードの設定
    • カスタムドメインとして利用するドメインの CNAME レコードを設定する
    • 値は tracking.autobahn.email と設定する
  • カスタムドメインの SSL/TLS サーバ証明書を用意し、@utobahn MTA システムへ適用 (有償)
    • 適用後、証明書の期限が切れるたびに都度の適用作業が発生する点に留意

※本番環境のみ利用可能で、試用環境は利用不可のオプション

トラッキングURLの置換処理

テキスト、HTMLのパートによって置換処理のルールが異なる。

テキストパート

以下の場合はURLが置換対象にならない、もしくは置換対象URLの欠落が発生する場合がある

  • 1行が一定サイズを超える長さで一定サイズの閾値にURL文字列が含まれる
  • URLの途中で改行している
  • URLの直前が行頭または半角空白ではない

https://example.com?id=hoge[CR][LF]
↑リンク
---
https://example.com?id=hogeが置換対象

https://example.com?id=[CR][LF]
hoge
↑リンク
---
https://example.com?id=が置換対象

...hoge.hoge https://example.com?id=hoge
一定の長さ ↑ URL文字列の途中で処理を跨ぐ
---
https://example.com?id=が置換対象

(https://example.com?id=hoge[CR][LF]
---
URL 直前に "(" があるため置換が行われない。"(" を消したり、半角空白を間にいれると https://example.com?id=hoge[CR][LF] が置換対象となる

HTMLパート

以下の場合はURLが置換対象にならない、もしくは置換対象URLの欠落が発生する場合がある

  • Aタグのタグ開始  <a  直後に改行している

<a href="https://example.com?id=hoge">リンク</a>
---
https://example.com?id=hogeが置換対象

<a name="hoge"[CR][LF]
href="https://example.com?id=hoge">リンク</a>
---
Aタグ開始後、半角スペース等が含まれるためhttps://example.com?id=hogeが置換対象

<a[CR][LF]
href="https://example.com?id=hoge">リンク</a>
---
置換対象にならない

...hoge.hoge<a href="https://example.com?id=hoge">リンク>
一定の長さ ↑ Aタグの途中で処理を跨ぐ
---
https://example.com?id=hogeが置換対象