動的テンプレートを使用したGoとSendGridからのメールの送信方法
Time to read:
動的テンプレートを使用したGoとSendGridからのメールの送信方法
SendGridでは、メールテンプレートを利用できるほか、必要に応じて独自のコードを使って、テンプレートにデータを動的に埋め込むことができます。アプリの新規ユーザーを歓迎するメッセージ、購入確認メールの送信、マーケティング目的のメッセージなど、用途に合わせてテンプレートを選択できます。
HTMLのコーディング時間を大幅に短縮できるだけでなく、見栄えの良いメールを誰でも簡単に作成できます。また、コードに直接触れる必要がないため、運用や管理もすっきりと保てます。
このチュートリアルは、Matthew Setterの「GoとSendGridを使って、30秒でメールを送信する方法」を補完するものですが、この優れた機能を活用して、店舗の経営者が領収書を送付するような手軽さでメールを送信する方法を説明します。ここでは、公式のTwilio SendGrid Golang APIライブラリも使用します。
前提条件
このチュートリアルでは、以下が必要です。
- SendGridアカウント(無料または有料) アカウントをお持ちでない方は、こちらをクリックして新規登録してください。
- Goバージョン1.20以降
- メールを受信するためのメールアドレス
- 本人確認済みのメールアドレス
動的テンプレートの作成
左側の[Email API > 動的テンプレート]に移動し、[Create a Dynamic Template](動的テンプレートの作成)をクリックして、「purchase-receipt-template」のような名前を設定します。新しいテンプレートはリストの最上部に追加されます。まだ、作成していない場合は、最初のテンプレートとして登録されます。テンプレートを展開し、テンプレートIDをコピーして安全な場所に保管してください。次に、[Add Version](バージョンの追加)をクリックします。
[Select a Design](デザインの選択)ウィザードで、[SendGrid Email Designs](SendGridメールデザイン)を選択します。次に、下にスクロールして[Retail Purchase Receipt Email Template](小売購入レシートメールテンプレート)、[選択]の順にクリックします。
その後、[Select Your Editing Experience](編集環境の選択)で[コードエディタ]オプションを選択します。
これで、片側にHTMLエディタ、もう片側にデザインを配置したテンプレートが完成しました。
テンプレートのカスタマイズ
Handlebarsを使ってテンプレートをカスタマイズし、コードから購入日、顧客名、メールアドレス、チケット番号などの動的なデータを反映させます。
デザイン側の日付をクリックすると、コード内の正確な位置に移動します。現在の値(2020年1月20日 午後5時40分)を{{purchase_date}}に置き換えます。
残りのデータについても同じ操作を行い、静的な値をHandlebarsの変数に置き換えます。デザイン内の従業員名をクリックし、既存の値を{{employee}}に置き換えます。残りの3つの要素についても同じ操作を行います。
- 顧客 -
{{customer}} - メール -
{{email}} - チケット番号 -
{{ticket_number}}
完了すると、メールテンプレートの該当セクションは以下のスクリーンショットのようになります。
最後に、反復処理を使用して購入済み項目表をカスタマイズします。デザインビューのリストの最初の項目をクリックすると、該当するコードセクションに移動します。次に、この項目がある表タグの前に{{#each items}}、次の項目がある表タグの直前に{{/each}}を追加します。
次に、以下のhandlebarsを項目情報に置き換えます。
- Villa Floral(120mL) -
{{this.item}} - 1 -
{{this.quantity}} - $175.90 -
${{this.price}}(ドル記号を削除しない)
変更後のHTMLコードは以下のようになります。
次に、2番目の固定項目({{/each}} handlebar直後の要素)を削除してください。データはすべて動的に送信されるため、この固定項目は不要になります。以下のスクリーンショットでハイライト表示されているのが確認できます。また、テンプレートのコード全体はこちらでご覧いただけます。
最後に、[保存]をクリックしてテンプレートを保存します。デザインビューの基本構造は、以下の例のようになっています。
テンプレートのテスト
動的テンプレートが正しく動作していることを確認するには、一部のデータを使ってテストすることができます。最上部のナビゲーションバーにある[{ } テストデータ]をクリックし、以下のJSONを追加します。
データはデザインビューに入力する必要があります。
依存関係のインポート
以下のGoパッケージが必要です。
- GoDotEnv(環境変数を読み取る)
- SendGridの公式Goライブラリ(メールを送信)
まず、新しいディレクトリ内でgo mod initを使用してGoモジュールを初期化する必要があります。
次に、go getコマンドを使用して、依存関係をインストールします。
必要な環境変数の設定
.envという名前の新しいファイルを作成し、以下の構成を貼り付けます。
ここに、SendGrid APIキー(次に作成)と以前作成したテンプレートIDを保存します。最後の4つのプレースホルダーを使用したいものに置き換えます。次に、YOUR TEMPLATE IDを、先ほど取得したテンプレートIDの値に置き換えます。
SendGrid APIキーの作成
SendGridアカウントに戻り、[設定] > [APIキー]をクリックし、[Create API Key](APIキーを作成)をクリックします。APIキーの名前を設定します。APIキーの権限については、[フルアクセス]を選択します。次に[Create & View](作成と表示)をクリックします。APIキーは一度表示されると、今後再表示されなくなります。プレースホルダーのYOUR API KEY(あなたのAPIキー)を新しく作成したキーに置き換えます。
コードの記述
環境変数を作成した後、send-email.goという名前のGoファイルを作成し、以下のコードを貼り付けます。
上記のコードの解説です。メール変数が初期化され、テンプレートIDを指定してSendGridから新しいメールサービスが作成されます。次に、HTTPリクエストとREST APIクライアントを定義するための動的テンプレートデータが設定されます。最後に、メールが送信され、エラーがログに記録されるか、成功メッセージが表示されます。
コードのテスト
今度は、コードを構築して実行する必要があります。Goファイル名を引数としてgo runコマンドを実行するだけで、すべて1つの手順で実行できます。
ターミナルに確認メッセージ[email successfully sent...](メールが正常に送信されました…)と表示されます。
メールの確認
こちらのコードから送信したすべてのデータが記載されたメールが届いているはずです。
まとめ
SendGridの動的テンプレートを活用すると、変更の多いカスタムデータをコードに埋め込む必要がなくなります。ロジックの処理に集中でき、メールデザインはSendGrid側で柔軟に管理・変更できます。
Miguel Ángelは、問題解決、執筆(コードと実体験)、音楽、ビールが好きなソフトウェアエンジニアです。詳しいプロフィールは、migrmrz.dev、LinkedIn、GitHubで確認してください。