ダウンロード サンプルファイル (501.2 KB)
メール送信の仕組み
ASP.NET Identityでのメール送信処理は、App_Start\IdentityConfig.csファイルに定義されたUserManager<T>クラスの派生クラスであるApplicationUserManagerクラス、およびEmailServiceクラスで行います。
ApplicationUserManagerクラスでは、これまでの連載でも登場したCreateメソッドの中で、メール送信処理を行うためのオブジェクトをEmailServiceプロパティに設定します(リスト1)。
public class ApplicationUserManager : UserManager<ApplicationUser>
{
…(略)…
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
…(略)…
manager.EmailService = new EmailService(); // メール送信処理オブジェクトの設定
…(略)…
}
}
このEmailServiceプロパティの型はIIdentityMessageService型です。IIdentityMessageService型は、その名の通りASP.NET Idenityの各種メッセージ送信処理を担当するインターフェースで、Taskを返す非同期のSendAsyncメソッドのみ持っています。UserManager<T>クラスはSendEmail拡張メソッドを呼び出すと、このEmailServiceプロパティのSendAsyncメソッドを呼び出してメール送信を行います。
UserManager<T>クラスには同様にSMS(ショートメッセージングサービス)を送信するためのSmsServiceプロパティも定義されています。メール、SMS以外のメッセージ(例えばTwitterで通知する、など)を送信したい場合は、独自の送信処理をIIdentityMessageServiceを実装したクラスとして作成し、そのクラスを使用してメッセージ送信するメソッドをApplicationUserManagerクラスに追加することで可能です。
さて、テンプレートで生成されたコードを見ると、EmailServiceプロパティにEmailServiceクラスの新しいインスタンスを設定しています。このEmailServiceクラスは同じくApp_Start\IdentityConfig.csファイルに定義され、SendAsyncメソッドの枠組みが生成されています。メールを送信するには、テンプレートで生成されたSendAsyncメソッドの中身を、独自に実装する必要があります。
EmailServiceクラスの実装
それでは、メールを送信できるようにEmailServiceクラスの実装を行って行きます。今回はクラウドメールサービスの「SendGrid」を利用してメールの送信を行ってみましょう。SendGridはSMTPサーバーとWeb上の管理コンソール、メール送信用のWeb APIなどを提供するクラウドサービスで、メール送信用ライブラリも提供しています。
SendGridの登録
まずはSendGridを利用するために、SendGridへのユーザー登録を行いましょう。SendGridは「株式会社 構造計画研究所」が日本での正規代理店ですので、そちらのサイトから指示に従って登録を行ってください。
SendGridライブラリのインストール
SendGridのライブラリはNuGetで配布されています。以下のコマンドを「NuGet パッケージ マネージャー コンソール」で実行し、ライブラリをインストールしてください。
PM> Install-Package SendGrid
SendGridのアカウント情報を構成ファイルに定義
次に、プログラムで使用するSendGridのアカウント情報(ユーザー名、パスワード)を構成ファイルから取得するように準備します。こういった認証情報はWeb.configに直に書いても良いのですが、アプリケーションの配置を容易にするため、別のファイルに切り出すことが多いです。今回はWeb.SendGrid.configというファイルに切り出すことにします。
まず、Web.configにWeb.SendGrid.configファイルを使うように記述を追加します(リスト2)。appSettings要素のfile属性を使い、Web.SendGrid.configの内容を読み込むようにしています。
<?xml version="1.0" encoding="utf-8"?> <configuration> …(略)… <appSettings file="Web.SendGrid.config" /> </configuration>
次に、新たにWeb.SendGrid.configという名前でXMLファイルを作成します(リスト3)。
<?xml version="1.0" encoding="utf-8"?> <appSettings> <add key="mailAccount" value="username@kke.com" /> <add key="mailPassword" value="password" /> </appSettings>
なお、ダウンロードできるサンプルにはWeb.SendGrid.configファイルは含めていません。代わりにWeb.SendGrid.config.sampleファイルを付けていますので、Web.SendGrid.configにリネームした後、自分で登録したSendGridのアカウント情報に内容を変更してください。
SendAsyncメソッドの実装
SendMailを使う準備ができたので、EmailServiceクラスのSendAsyncメソッドを実装しましょう(リスト4)。
// (1)メール送信処理の定義
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
// (2)メールメッセージ作成
var sendGridMessage = new SendGrid.SendGridMessage();
sendGridMessage.AddTo(message.Destination);
sendGridMessage.From = new System.Net.Mail.MailAddress(
"takano-sho@example.com", "TAKANO Sho");
sendGridMessage.Subject = message.Subject;
sendGridMessage.Text = message.Body;
sendGridMessage.Html = message.Body;
// (3)認証情報の作成
var credentials = new System.Net.NetworkCredential(
ConfigurationManager.AppSettings["mailAccount"],
ConfigurationManager.AppSettings["mailPassword"]
);
// (4)メール送信
var transportWeb = new SendGrid.Web(credentials);
return transportWeb.DeliverAsync(sendGridMessage);
}
}
(1)メール送信処理の定義
IIdentityMessageServiceインターフェースを実装してクラスを定義します。前述の通り、テンプレートによりEmailServiceクラスとそのSendAsyncメソッドの基本的な枠組みは生成されてますので、SendAsyncメソッドの処理を実装します。
(2)メールメッセージ作成
SendGridを使ったメッセージオブジェクトを作成します。メッセージの送信元(From)は、実際は作成するWebアプリケーションの管理者やサポート窓口などのメールアドレスを設定することになるでしょう。
(3)認証情報の作成
SendGridを使用するためのユーザー、パスワードを用いて、System.Net.NetworkCredentialクラスのインスタンスを作成し、認証情報として使用します。ユーザー、パスワードはConfigurationManagerクラスを用いて、先ほど作成したWeb.SendGrid.configファイルで定義した値を使うようにしています。
(4)メール送信
SendGrid.WebクラスのDeliverAsyncメソッドを使用して、SendGridのWeb API経由でメールを送信します。
これでメールを送信するための準備が整いました。
この記事は参考になりましたか?
- ASP.NET Identity入門連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 高野 将(タカノ ショウ)
<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。< WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での 登録メンバ は約50名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 、 記事 多数。 RSS X: @WingsPro_info (公式)、 @WingsPro_info/wings (メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
