SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ASP.NET Identity入門

ASP.NET Identity 2.0の新機能
~メール連携機能のためのメール送信処理

ASP.NET Identity入門 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

メール送信の仕組み

 ASP.NET Identityでのメール送信処理は、App_Start\IdentityConfig.csファイルに定義されたUserManager<T>クラスの派生クラスであるApplicationUserManagerクラス、およびEmailServiceクラスで行います。

 ApplicationUserManagerクラスでは、これまでの連載でも登場したCreateメソッドの中で、メール送信処理を行うためのオブジェクトをEmailServiceプロパティに設定します(リスト1)。

リスト1 メール送信処理オブジェクト設定(App_Start\IdentityConfig.csより)
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の内容を読み込むようにしています。

リスト2 Web構成ファイルの変更(Web.configより)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  …(略)…
  <appSettings file="Web.SendGrid.config" />
</configuration>

 次に、新たにWeb.SendGrid.configという名前でXMLファイルを作成します(リスト3)。

リスト3 SendGrid用構成ファイルの作成(Web.SendGrid.config)
<?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)。

リスト4 メール送信処理(App_Start\IdentityConfig.csより)
// (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経由でメールを送信します。

 これでメールを送信するための準備が整いました。

次のページ
確認メール送信処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 高野 将(タカノ ショウ)

<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8047 2014/09/18 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング