.NET TIPS

[ASP.NET]PasswordRecoveryコントロールのパスワード通知メールをカスタマイズするには?[2.0のみ、C#、VB]

山田 祥寛
2007/01/26

 「TIPS:[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?」でも紹介したように、ASP.NET 2.0ではユーザー/アクセス管理にかかわるユーザー・インターフェイスを作成するために、「ログイン・コントロール」と呼ばれる多くのサーバ・コントロールを提供している。

 PasswordRecoveryコントロールは、ログイン・コントロールに属する代表的なコントロールの1つで、ユーザーがパスワードを忘れた場合に問い合わせを行うためのウィザードを生成するコントロールだ。あらかじめ登録しておいた「秘密の質問」に対応する回答を入力することで、初期化されたパスワードをユーザー・アカウントに関連付いたメール・アドレスに送信できる。

 本稿では、まずこのPasswordRecoveryコントロールによる標準的なメール通知の方法を見た後、通知メールの内容をカスタマイズするための方法を紹介する。なお、本稿のコードを実行するに際しては、先のTIPSで示した要領で、管理ツールからあらかじめユーザー「tsuzuki」を作成しておく必要がある。

 それではさっそく、具体的な手順を見ていくことにしよう。

1. メール送信の基本情報を定義する

 PasswordRecoveryコントロールからパスワード通知メールを送信するには、管理ツールでメール送信のための基本情報をあらかじめ定義しておく必要がある。

 この管理ツールは、Visual Studio 2005(以降、VS 2005)のメニュー・バーから[Web サイト]−[ASP.NET 構成]を選択することで起動が可能だ。管理ツールが起動したら、[アプリケーション]タブ−[SMTP 電子メール設定の構成]を選択する。

[SMTP設定の構成]画面
VS 2005のメニュー・バーから[Web サイト]−[ASP.NET 構成]を選択すると表示される。

 上図のような[SMTP設定の構成]画面が表示されるので、以下の表の要領で必要な情報を入力してほしい。もちろん、ここで挙げている設定値は環境によって異なるので、適宜、自身の環境に合わせて読み替えてほしい。

項目 概要 設定値
サーバー名 SMTPサーバのホスト名 smtp.examples.com
サーバーポート SMTPサーバのポート番号 25
送信元 メール発信に際して利用する発信元アドレス CQW15204@nifty.com
認証 SMTPサーバへのアクセスに必要な認証情報 なし
[SMTP設定の構成]画面の設定値(例)

 これでメール送信のための準備は完了だ。ちなみに、ここで定義された設定情報は、アプリケーション構成ファイル「Web.config」に記録される。以下に、自動生成された構成定義を抜粋しておく。もちろん、以降、変更がある場合にはこちらの構成ファイルを直接に編集することも可能だ。

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  ……中略……
  </system.web>
  <system.net>
    <mailSettings>
      <smtp from="CQW15204@nifty.com">
        <network host="smtp.examples.com" password="" userName="" />
      </smtp>
    </mailSettings>
  </system.net>
</configuration>
管理ツールによって自動生成されたメール送信のための基本情報(Web.configから抜粋)

2. パスワード問い合わせ用のページを用意する

 メール送信の基本情報さえ定義してしまえば、後はPasswordRecoveryコントロールを貼り付けたページを用意するだけだ。新規にPasswordRecovery.aspxを作成し、以下の画面の要領でサーバ・コントロールを配置してほしい。

パスワード問い合わせ画面(PasswordRecovery.aspx)のフォーム・レイアウト
ASP.NET 2.0では、フォーム・デザイナ上にPasswordRecoveryコントロールを配置するだけで、パスワード問い合わせページを構築できる。

 動作上は関係ないが、ここではタスク・メニューから[オートフォーマット]を選択し、「優雅」フォーマットを適用しておくものとする。もちろん、個々のスタイル・プロパティを設定することで、自前のデザインを一から定義することも可能であるが、その場合にも、いったんオートフォーマットで自分のイメージに近いデザインを適用しておいて、そこからカスタマイズした方がより手軽に設定を済ませられる。

 PasswordRecoveryコントロールで公開されているプロパティについては、あまりに膨大で、本稿で紹介することはできないので、「MSDN:PasswordRecovery クラス」などのドキュメントを参照いただきたい。

 なお、ここで参考までにVS 2005によって自動生成されたコードを引用しておく。

<asp:PasswordRecovery ID="PasswordRecovery1"
  runat="server" BackColor="#F7F7DE" BorderColor="#CCCC99"
  BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="10pt">
  <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
</asp:PasswordRecovery>
PasswordRecovery.aspxのソース・コード(抜粋)

 以上を理解したら、作成したPasswordRecovery.aspxを実行してみよう。

PasswordRecovery.aspxの実行結果

 上の画面のように、正しいユーザー名、秘密の質問に対する回答を入力することで、パスワードがいったん初期化され、ユーザー・アカウントに関連付いたメール・アドレスに初期化済みのパスワードが送信される。

 以下は、PasswordRecoveryコントロールから発行されたパスワード通知メールだ。

PasswordRecoveryコントロールから発行されたパスワード通知メール

●通知メールの内容をカスタマイズする

 以上、PasswordRecoveryコントロールを利用することで、パスワード通知機能をコーディングレスで実現できることがお分かりいただけたことと思う。もっとも、これによって送信される通知メールの内容は、デフォルトで用意された文書テンプレートに沿った内容だ。アプリケーションによっては、通知メールにアプリケーション固有の情報や注意書きを付記したいというケースもあるだろう。

 例えば、PasswordRecoveryコントロールで自動生成されたパスワードはランダムに生成されたもので、エンド・ユーザーにとって分かりにくいものであるし、そもそも暗号化されることなく、平文でメール送信されたものだ。セキュリティの観点からすれば、サイトへの初回アクセスのタイミングで、必ずパスワードの変更を行うよう促しておきたいところだ。

 このような場合にも、PasswordRecoveryコントロールでは、通知メールのテンプレート機能を提供しており、ごくシンプルな手順でメール本文のカスタマイズを行うことが可能だ。

 方法は簡単、アプリケーション・ルート配下の「App_Data」フォルダに対して*、文面テンプレートとして、以下のような「SendMail.txt」(ファイル名は任意)を用意するだけだ。

* 厳密には、配置先は必ずしもApp_Dataフォルダでなくても構わない。しかし、アプリケーション内部でのみ使用するような情報は、原則として、エンド・ユーザーがHTTP経由ではアクセスできないApp_Dataフォルダに配置するべきだ。
 
<% UserName %>様:

お問い合わせのパスワードを通知いたします。

  <% Password %>

なお、本メールは平文で送信されています。
初回アクセス時に、必ずパスワード変更画面から
パスワード変更の手続きを行ってください。
PasswordRecoveryコントロールで使用する通知メールのテンプレートの例

 テンプレートには<% …… %>でくくったプレイスホルダを配置することが可能だ。「<% UserName %>」「<% Password %>」には、それぞれ問い合わせを行ったユーザー名、初期化されたパスワードが動的に埋め込まれる。

 なお、文面テンプレートは、文字コードUTF-8で保存する必要がある。さもないと、デフォルトの設定ではマルチバイト文字が文字化けしてしまうので、注意してほしい。

 テンプレートが用意できたら、後は、PasswordRecoveryコントロールのMailDefinition-BodyFileNameサブ・プロパティに対して、テンプレートのパスを指定するだけだ(この場合は「~/App_Data/SendMail.txt」)。

 ここまでの準備ができたら、もう一度、PasswordRecovery.aspxを実行してみよう。先ほどと同様の手順でパスワード問い合わせを行うと、以下のようにカスタマイズされたテンプレートに沿って、パスワード通知メールが送信されているのが確認できるはずだ。

カスタマイズされたパスワード通知メール

 ちなみに、PasswordRecoveryコントロールのMailDefinitionプロパティのサブ・プロパティには、そのほかにもいくつかのプロパティが用意されており、通知メールの件名やあて先をカスタマイズすることができる。最後に、これらのサブ・プロパティをまとめておく。

プロパティ 概要
BodyFileName 本文テキストを表すテンプレート・ファイルのパス
CC CCあて先
EmbeddedObjects 添付ファイル
From 送信元アドレス
IsBodyHtml 本文がHTML形式か
Priority 優先順位(High|Normal|Low)
Subject 件名
主なMailDefinitionプロパティのサブ・プロパティ(MailDefinitionクラスの主なプロパティ)

 なお実際には、これらはMailDefinitionクラス(System.Web.UI.WebControls名前空間)のプロパティである。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Webフォーム 処理対象:認証
使用ライブラリ:PasswordRecoveryコントロール
使用ライブラリ:MailDefinitionクラス(System.Web.UI.WebControls名前空間)
関連TIPS:[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?

この記事と関連性の高い別の.NET TIPS
電子メールを送信するには?
.NET Framework 2.0で電子メールを送信するには?
[ASP.NET]ログイン・コントロールのレイアウトをテンプレート定義するには?
[ASP.NET]セキュリティ・コントロールでログイン機能を作成するには?
JISコード(JIS-2022-JP)でメールを送信するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間