SendGridのV3 Mail Send APIではメール本文にあたるcontentは1つしか定義できません。(contentの型が配列で定義されているのはマルチパートでtext/plain,text/htmlを定義するため)
v3 Mail Send API概要 - ドキュメント | SendGrid
1リクエストの中で、どうしても異なる内容のメールを送りたい場合はsubstitutionsで本文を置換できるのでは?というツイートをみかけ、実際に試してみました。Javaなどのライブラリを利用した確認ではなく、JSONそのままでHTTPツールを使ってしまったのですが、以下のような形です。
{
"personalizations": [
{
"to": [
{
"email": "kikutaro1@example.com"
}
],
"substitutions": {
"%bodytext%": "テキスト1だよ",
"%bodyhtml%": "HTML1だよ。<b>太字になる?</b>"
},
"subject": "メールタイトル1"
},
{
"to": [
{
"email": "kikutaro2@example.com"
}
],
"substitutions": {
"%bodytext%": "テキスト2だよ",
"%bodyhtml%": "HTML2だよ。<b>太字になる?</b>"
},
"subject": "メールタイトル2"
}
],
"from": {
"email": "kikutaro@example.com",
"name": "キクタロー"
},
"content": [
{
"type": "text/plain",
"value": "%bodytext%"
},
{
"type": "text/html",
"value": "<html><body>%bodyhtml%</body></html>"
}
]
}
substitutionはタグ定義を行って、そこに値を差し込む機能です。よく宛先とかで「%name%様へ」みたいにするようなやつです。これを使って、textとhtmlの本文をそれぞれ「%bodytext%」「%bodyhtml%」と定義して、差し込んでみました。
特にhtml側は、ちゃんとhtmlが差し込みで反映されるのか?が気になると思いますが、上記のような単純なHTMLである場合、以下のようにちゃんと表示されました。