F#でメール送信!SendGridを使って簡単に実装する方法
- 2014年5月27日
- by SendGrid
- Category: 技術ネタ 機能・使い方
はじめに
今回はF#からSendGrid公式ライブラリを使ってメールを送信する方法をサンプルコードを交えながらご紹介します。メール文面(件名、本文)への文字列埋め込み、日本語、添付ファイルなどを利用しています。
前提条件
サンプルコードを試す前に以下の環境のセットアップを完了しておいてください。
・.NET Framework 4.0
・Visual Studio 2013
・git
・SendGridアカウント
本記事の内容はWindows 8.1上に環境構築したものを利用しています。
準備
コードサンプルをリポジトリからクローンします。
git clone https://github.com/sendgridjp/sendgridjp-fsharp-example.git
リポジトリ内に移動してorg.App.configをコピーします。
cd sendgridjp-fsharp-example¥sendgridjp-fsharp-example copy org.App.config App.config
Visual Studioでサンプル内のsendgridjp-fsharp-example.slnファイルを開き、先ほどコピーしたApp.configファイルを編集(後述)します。
編集が終わったら実行(F5キー)します。
App.configファイルの編集
App.configファイルは以下のような内容になっています。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="SENDGRID_USERNAME" value="YOUR_SENDGRID_USERNAME" /> <add key="SENDGRID_PASSWORD" value="YOUR_SENDGRID_PASSWORD" /> <add key="TOS" value="you@youremail.com,friend1@friendemail.com,friend2@friendemail.com" /> <add key="FROM" value="you@youremail.com" /> </appSettings> </configuration>
- SENDGRID_USERNAME
SendGridのユーザ名を指定してください。 - SENDGRID_PASSWORD
SendGridのパスワードを指定してください。 - TOS
宛先をカンマ区切りで指定してください。サンプルコードの関係上、宛先は3つ以上指定してください。 - FROM
送信元アドレスを指定してください。
メール送信サンプルコード
今回使用したサンプルコード(SendGridFsharpExample.cs)を以下に示します。
open System.Net open System.Net.Mail open System.Configuration open SendGrid [<EntryPoint>] let main argv = let sendGridUserName = ConfigurationManager.AppSettings.Item("SENDGRID_USERNAME") let sendGridPassword = ConfigurationManager.AppSettings.Item("SENDGRID_PASSWORD") let tos = ConfigurationManager.AppSettings.Item("TOS").Split(',') let from = ConfigurationManager.AppSettings.Item("FROM") let smtpapi = new SendGrid.SmtpApi.Header() smtpapi.SetTo(tos) smtpapi.AddSubstitution("fullname", [| "田中 太郎"; "佐藤 次郎"; "鈴木 三郎" |]) smtpapi.AddSubstitution("familyname", [| "田中"; "佐藤"; "鈴木" |]) smtpapi.AddSubstitution("place", [| "office"; "home"; "office" |]) smtpapi.AddSection("office", "中野") smtpapi.AddSection("home", "目黒") smtpapi.SetCategory("カテゴリ1") let email = new SendGrid.SendGridMessage() email.AddTo(from) // SmtpapiのSetTo()を使用しているため、実際にはこのアドレスにはメールは送信されない email.From <- new MailAddress(from, "送信者名") email.Subject <- "[sendgrid-f#-example] フクロウのお名前はfullnameさん" email.Text <- "familyname さんは何をしていますか?rn 彼はplaceにいます。" email.Html <- "<strong> familyname さんは何をしていますか?</strong><br />彼はplaceにいます。" email.Headers.Add("X-Smtpapi", smtpapi.JsonString()) email.AddAttachment(@"....gif.gif") let credentials = new NetworkCredential(sendGridUserName, sendGridPassword) let web = new Web(credentials) web.Deliver(email) 0 // 整数の終了コードを返します
解説
8~11行目
App.configファイルからSendGridの認証情報、送信元アドレス、宛先リストを読み込んでいます。
14行目
宛先リストを設定しています。宛先を複数指定しても配信されたメールの宛先には他の宛先が見えることはありません。受信者のアドレスのみ設定されます。
また、複数の宛先を指定した場合でも送信リクエストは1回となるため、大量の宛先に対して高速に送信処理要求を送ることが可能です。宛先リストは最大で10,000アドレスまで指定可能です。
15~17行目
Substitutionタグに対応するリストを設定しています。Substitutionタグは宛先ごとに件名、本文に文字列を埋め込むための機能です。AddSubstitution()の2番目の引数で指定した値が14行目で指定した宛先リストの要素に対応しています。
18~19行目
Sectionタグで置換する文字列を設定しています。Sectionタグは対応する文字列に置換されます。複数箇所に同じ文字列を埋め込みたい場合に使用します。
20行目
カテゴリを設定しています。カテゴリを指定しておくと、カテゴリごとにメール配信に関わる統計情報を取得することができるようになります。
23行目
ダミーの宛先を設定しています。この宛先が使用されることはありませんが、設定が無いとBad Requestになります。実際には14行目で設定した宛先リストに送信されます。
24行目
送信者名、送信元アドレスを設定しています。
25~27行目
メールの件名と本文(text/plainおよびtext/html)を設定しています。「fullname」「familyname」「place」というSubstitutionタグと、「office」「home」というSectionタグを埋め込んでいます。尚、タグでスペースは使用できません。
28行目
13〜20行目で構築した値をX-SMTPAPIヘッダとして設定しています。
29行目
添付ファイルを設定しています。
31~33行目
メールを送信しています。
実行結果
各宛先には次のようなメールが配信されます。
宛先には、自分のみが設定されていることがわかります。
Substitutionタグ、Sectionタグがそれぞれ指定した文字列に置換されていることが確認できます。
宛先1で受信したメール
宛先2で受信したメール
送信元アドレスに「sendgrid.info経由」と表示されているのはWhitelabel設定(Silverプラン以上で利用可)を行っていないためです。今回は設定しませんでしたが、正しく設定することで独自ドメインからメールを送信したように表示することができます。
新規プロジェクトを作成する場合の注意点
今回ご紹介したサンプルはSendGrid公式ライブラリがプロジェクトに含まれていましたが、新たにプロジェクトを作る場合、NuGetパッケージ管理によりライブラリを追加する必要があります。手順をご紹介します。
メニューからプロジェクト>NuGetパッケージの管理を選択して「NuGetパッケージの管理」ダイアログを表示します。
「SendGrid」で検索すると、候補となるパッケージが一覧表示されるので「SendGrid」パッケージを選択してインストールします。
インストールが完了すると関連するパッケージがプロジェクトに追加されます。
さいごに
SendGrid公式ライブラリを利用すると、複雑なSMTPプロトコルに触れることなく簡単にメール送信を行うことができます。文字の埋め込みやカテゴリ指定なども簡単です。
また、バウンス時の処理や配信停止の管理、送信ドメイン認証の設定などもSendGridに任せることができるので、開発工数を大幅に削減することができます。
SendGridのフリートライアル(無期限)へのお申込みはこちらから。
その他の言語については、メール送信チュートリアル【まとめ】 をご覧ください。