以前、メールサービスのSendGridを使ったメール配信の作成をしていて、DynamicTemplateがうまく動かなかったことをまとめておこうと思います。
本投稿はディップアドベントカレンダー2021の4日目の記事です。
Sendgridとは・・
SendGridとは全世界で利用されているメール配信サービスです。
SMTP, APIでメール送信を行なってくれるサービスで使われている方も多いと思います。 今回の話題はAPI経由でメール送信を行うときの便利な機能であるDynamicTemplateでハマった部分についてお話しようと思います。
DynamicTemplateはSendGridにTemplateを登録しておき、API経由でTemplateベースのメールを送信する機能です。
APIにメール本文すべてを渡すのではなく、一部を変数化し、その変数をTemplateに当てはめて動的なメールを送信することができます。
変数展開だけでなく、ループやIF文を使い条件分岐をさせることもでき、メール表現の幅が広がります。
どこにハマったの?
結果から言うとIF文などちょっとロジカルなことをする部分でハマりました。
DynamicTemplateのチュートリアル
IF文をかいてもテンプレートがうまく反応してくれず、そのまま画面に表示されてしまう状態でした。
下記のような実装を行いたかったのですが、本文にそのまま条件式が出てしまう状態になり、何がいけないのかわからず長い時間悩みました。
成功した状態
失敗した状態
きちんと理解できた今では「あぁ、そんなことか」みたいな状態ですが、当時はなぜ動かないのかわからずとても困りました。 皆さん成功、失敗の画像から何が行けなかったかわかったでしょうか?
成功版のソース
{{#if hoge}}
失敗版のソース
{{ #if hello }}
ということで、条件式とテンプレート構文の間に半角スペースがあるかないかが正解となります。
スペースを入れてしまうとテンプレート構文と認識されずに文字列としてメール本文に出てきてしまいます。
また、IF文の中にある変数展開もされずに文字列として表示されてしまいます。
当初、見やすいようにと思い半角スペースを入れていたため、表示がおかしくなってしまい、何故おかしくなってるかわからずに右往左往してしまいました。
shellなどでもスペースを入れる、入れないで挙動が変わってっきたりすることがあります。
公式ドキュメントでも半角スペースが入っていないのに見やすいからという理由で安易に入れてしまうようなことは無いようにしましょう。
以上