Scalaでメール送信!SendGridを使って簡単に実装する方法
- 2015年8月14日
- by SendGrid
- Category: 技術ネタ 機能・使い方
はじめに
今回は、ScalaからSendGrid公式のJavaライブラリを使ってメールを送信する方法を、サンプルコードを交えながらご紹介します。メール文面(件名、本文)への文字列埋め込み、日本語、添付ファイルなどを利用しています。
前提条件
サンプルコードを試す前に以下の環境のセットアップを完了しておいてください。
・Java
・Scala
・sbt
・SendGridアカウント
本記事の内容はUbuntu上に環境構築したものを利用しています。なお、SendGrid公式のJavaライブラリ(sendgrid-java)はバージョン2.2.2を使用しています。
準備
コードサンプルをリポジトリからクローンします。
git clone https://github.com/sendgridjp/sendgridjp-scala-example.git
リポジトリ内に移動してapplication.conf.exampleをコピーします。
cd sendgridjp-scala-example cd src/main/resources/ cp application.conf.example application.conf
application.confファイルを編集(後述)します。
sbtによる依存関係の解決とビルド、そして実行を行います。
cd ../../../ sbt run
application.confファイルの編集
application.confファイルは以下のような内容になっています。
API_KEY = "your_api_key" TOS = ["you@youremail.com", "friend1@friendemail.com", "friend2@friendemail.com"] FROM = "you@youremail.com"
- API_KEY
SendGridのAPI Key(Mail SendへのFULL ACCESSパーミッションが必要)を指定してください。 - TOS
宛先をカンマ区切りで指定してください。サンプルコードの関係上、宛先は3つ以上指定してください。 - FROM
送信元アドレスを指定してください。
メール送信サンプルコード
今回使用したサンプルコードを以下に示します。
import com.sendgrid.SendGrid import com.typesafe.config.ConfigFactory object SendGridScalaExample extends App { val config = ConfigFactory.load() val apiKey = config.getString("API_KEY") val tos = config.getStringList("TOS").toArray(Array[String]()) val from = config.getString("FROM") val file = new java.io.File(getClass.getResource("gif.gif").getPath) val email = new SendGrid.Email() .addSmtpApiTo(tos) .addSubstitution("fullname", Array("田中 太郎", "佐藤 次郎", "鈴木 三郎")) .addSubstitution("familyname", Array("田中", "佐藤", "鈴木")) .addSubstitution("place", Array("office", "home", "office")) .addSection("office", "中野") .addSection("home", "目黒") .addCategory("category1") .setFrom(from) .setFromName("送信者名") .setSubject("[sendgrid-scala-example] フクロウのお名前はfullnameさん") .setText("familyname さんは何をしていますか?rn 彼はplaceにいます。") .setHtml("<strong> familyname さんは何をしていますか?</strong><br />彼はplaceにいます。") .addAttachment("owl.gif", file) val sendgrid = new SendGrid(apiKey) val response = sendgrid.send(email) println(response.getMessage) }
解説
6~8行目
設定ファイルからSendGridの認証情報、送信元アドレス、宛先リストを読み込んでいます。
10行目
画像ファイルを読み込んでいます。
13行目
宛先リストを設定しています。宛先を複数指定しても配信されたメールの宛先には他の宛先が見えることはありません。受信者のアドレスのみ設定されます。
また、複数の宛先を指定した場合でも送信リクエストは1回となるため、大量の宛先に対して高速に送信処理要求を送ることが可能です。宛先リストは最大で10,000アドレスまで指定可能です。
14~16行目
Substitutionタグに対応する配列を設定しています。Substitutionタグは宛先ごとに件名、本文に文字列を埋め込むための機能です。2番目の引数で指定した各値が13行目で指定した宛先リスト配列の要素に対応しています。
17~18行目
Sectionタグで置換する文字列を設定しています。Sectionタグは対応する文字列に置換されます。複数箇所に同じ文字列を埋め込みたい場合に使用します。
19行目
カテゴリを設定しています。カテゴリを指定しておくと、カテゴリごとにメール配信に関わる統計情報を取得することができるようになります。
20〜21行目
送信元アドレス、送信者名を設定しています。
22~24行目
メールの件名と本文(text/plainおよびtext/html)を設定しています。「fullname」「familyname」「place」というSubstitutionタグと、「office」「home」というSectionタグを埋め込んでいます。なおタグでスペースは使用できません。
25行目
添付ファイルを設定しています。
27~29行目
メールを送信してレスポンスを出力しています。
実行結果
各宛先には次のようなメールが配信されます。
宛先には、自分のみが設定されていることがわかります。
Substitutionタグ、Sectionタグがそれぞれ指定した文字列に置換されていることが確認できます。
宛先1で受信したメール
宛先2で受信したメール
送信元アドレスに「sendgrid.net経由」と表示されているのはDomain Whitelabelを設定していないためです。正しく設定することで、独自ドメインからメールを送信したように表示することができます。
さいごに
SendGrid公式ライブラリを利用すると、複雑なSMTPプロトコルに触れることなく簡単にメール送信を行うことができます。文字の埋め込みやカテゴリ指定なども簡単です。
また、バウンス時の処理や配信停止の管理、送信ドメイン認証の設定などもSendGridに任せることができるので、開発工数を大幅に削減することができます。
SendGridのフリートライアル(無期限)へのお申込みはこちらから。
その他の言語については、メール送信チュートリアル【まとめ】をご覧ください。