方法 : 状態監視通知の電子メールを送信する
更新 : 2007 年 11 月
ASP.NET アプリケーションを、ASP.NET 状態監視 Web イベントが発生したときに電子メール通知を送信するように設定できます。そのためには、使用できるいずれかの電子メール Web イベント プロバイダを構成します。
ASP.NET 状態監視システムは、状態監視 Web イベント データを処理するいくつかのイベント プロバイダに付属しています。EventLogWebEventProvider、SqlWebEventProvider、および WmiWebEventProvider の各イベント プロバイダだけが、ルートの Web.config ファイルにあらかじめ設定されています。このトピックでは、電子メール Web イベント プロバイダの構成設定を追加する方法と、それらのプロバイダが特定のイベントを待機できるようにする方法について説明します。
プロバイダが待機できる Web イベントの一覧については、ルートの Web.config ファイルの <eventMappings> 要素を参照するか、または「ASP.NET Health Monitoring の概要」の「Web イベント」セクションを参照してください。
Web アプリケーションからの電子メールの送信
このトピックのコード例では、Web アプリケーションが電子メール メッセージを送信するように設定されている必要があります。次の手順は、Web サーバーに SMTP (Simple Mail Transfer Protocol) サービスをインストールおよび設定済みで、電子メール メッセージを配信できる SMTP サーバーにアクセス可能である場合に、アプリケーションを設定する方法について説明しています。詳細については、「方法 : IIS 6.0 内で SMTP 仮想サーバーをインストールおよび構成する」を参照してください。
電子メールを送信するように ASP.NET アプリケーションを設定するには
アプリケーションの Web.config ファイルを開き、<system.net> セクション内で <mailSettings> 要素を設定します。<smtp> 要素の deliveryMethod 属性では配信方法を、<network> 要素の host 属性では SMTP サーバーの名前をそれぞれ指定する必要があります。また、defaultCredentials 属性は true に設定することをお勧めします (その他の属性も使用できますが、詳細については要素のトピックを参照してください)。
構成設定は次の例のようになります。
<configuration xmlns="https://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.net> <mailSettings> <smtp deliveryMethod="Network"> <network defaultCredentials="true" host="smtpservername" /> </smtp> </mailSettings> </system.net> <!-- Other configuration settings. --> </configuration>
メール プロバイダの設定
SimpleMailWebEventProvider Web イベント プロバイダを設定するには
アプリケーションの Web.config ファイルを開き、<system.web> セクションの <healthMonitoring> 要素内に新しい <providers> 要素を追加します。この新しい providers 要素に、SimpleMailWebEventProvider Web イベント プロバイダを設定します。このプロバイダは ASP.NET 状態監視システムに含まれていますが、ルートの Web.config ファイルにはあらかじめ設定されていません。
構成設定は次の例のようになります。
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <providers> <add name="exampleMailWebEventProvider" type="System.Web.Management.SimpleMailWebEventProvider" to="someone@contoso.com" from="someone@contoso.com" buffer="false" subjectPrefix="WebEvent has fired" /> </providers> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
この手順の目的を達成するために、buffer 属性を false に設定して、イベント バッファリングを無効にします。name 属性は任意で、次の手順でプロバイダを識別するために使用されます。後の手順でテストを行うために、to 属性と from 属性を自分の電子メール アドレスに変更します。
<healthMonitoring> 要素内に新しい <rules> 要素を追加します。この新しい rules 要素は、すべての Web イベントを待機する電子メール プロバイダを設定します。
構成設定は次の例のようになります。
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <!-- <providers> element from the previous step --> <rules> <add name="Testing Mail Event Providers" eventName="All Events" provider="exampleMailWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:01:00" custom="" /> </rules> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
provider 属性は、前の手順の providers 要素の name 属性と同じです。この rules 要素の eventName 属性は、ルートの Web.config ファイルにあらかじめ設定されている eventMappings 要素の name 属性と同じです。この設定により、ASP.NET アプリケーションで Web イベントが発生するたびに電子メール メッセージが送信されるようになります。イベントには、アプリケーションの起動と停止、設定変更、要求などが含まれます。
この手順を実行するには、前の手順の rules 要素と provider 要素を、同じ構成ファイルで定義します。または、provider 要素を構成ファイルのチェイン内の上位の (ルートの Web.config ファイルに近い) 構成ファイルに配置することもできます。
アプリケーションからページを要求して、設定をテストします。構成設定を変更した場合は、それによってアプリケーション再起動イベントが発生したために、電子メールを既に受信している可能性があります。受信する電子メールの件名とメッセージ本文は、次のメッセージの例のようになります。
Subject: Event Notification 1, part 1: WebEvent has fired <event> Body:
Application Information --------------- Application domain: /LM/w3svc/1/ROOT/ Trust level: Full Application Virtual Path: / Application Path: Machine name:
Events --------------- ---------------
TemplatedMailWebEventProvider Web イベント プロバイダを設定するには
アプリケーションの Web.config ファイルを開き、<system.web> セクションの <healthMonitoring> 要素内に新しい <providers> 要素を追加します。この新しい providers 要素に、TemplatedMailWebEventProvider Web イベント プロバイダを設定します。このプロバイダは ASP.NET 状態監視システムに含まれていますが、ルートの Web.config ファイルにはあらかじめ設定されていません。
構成設定は次の例のようになります。
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <providers> <add name="exampleTemplatedMailWebEventProvider" type="System.Web.Management.TemplatedMailWebEventProvider" template="template.aspx" detailedTemplateErrors="true" to="someone@contoso.com" from="someone@contoso.com" buffer="true" bufferMode="Notification" maxMessagesPerNotification="1" maxEventsPerMessage="1" /> </providers> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
この手順を実行するには、buffer 属性を false に設定して、イベント バッファリングを有効にします。bufferMode 属性の値である Notification は、ルートの Web.config ファイルで定義されています。バッファリングの詳細については、「ASP.NET Health Monitoring イベントの拡張」を参照してください。
name 属性は任意で、次の手順でプロバイダを識別するために使用されます。この手順の後の後の方でテストを行うために、to 属性と from 属性を自分の電子メール アドレスに変更します。
<healthMonitoring> 要素内に新しい <rules> 要素を追加します。この新しい rules 要素は、すべての Web イベントを待機する電子メール プロバイダを設定します。
構成設定は次の例のようになります。
<configuration> <system.web> <healthMonitoring enabled="true" heartbeatInterval="0"> <!-- <providers> element from the previous step --> <rules> <add name="Testing Templated Mail Event Providers" eventName="Request Processing Events" provider="exampleTemplatedMailWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" custom="" /> </rules> </healthMonitoring> </system.web> <!-- Other configuration settings. --> </configuration>
provider 属性は、前の手順の providers 要素の name 属性と同じです。この例の rules 属性の eventName 属性は、ルートの Web.config ファイルにあらかじめ設定されている eventMappings 要素の name 属性と同じです。この設定により、ASP.NET アプリケーションのページやその他のリソースに対して要求が行われるたびに電子メールメッセージが送信されるようになります。
Template.aspx という名前の電子メール テンプレート ファイルを作成し、アプリケーションのルートに配置します。このファイル名は、providers 要素の template 属性の値です。アプリケーションで要求イベントが発生すると、文字列式を使用してテンプレート ファイルにデータが読み込まれ、通知電子メール メッセージとして送信されます。式の使用方法の詳細については、「ASP.NET 式の概要」を参照してください。
テンプレート ファイルは次の例のようになります。
<%@ Page Language="cs" %> <%@ Import Namespace="System.Web.Management" %> <script runat="server"> void Page_Load() { MailEventNotificationInfo info = TemplatedMailWebEventProvider.CurrentNotification; Label0.Text = "EventsDiscardedByBuffer: " + info.EventsDiscardedByBuffer + '\n'; Label1.Text = "EventsInBuffer: " + info.EventsInBuffer + '\n'; Label2.Text = "NotificationSequence: " + info.NotificationSequence + '\n'; Label3.Text = "NotificationType: " + info.NotificationType + '\n'; Label4.Text = "EventsInNotification: " + info.EventsInNotification + '\n'; Label5.Text = "EventsRemaining: " + info.EventsRemaining + '\n'; Label6.Text = "MessagesInNotification: " + info.MessagesInNotification + '\n'; Label7.Text = "eventsDiscardedDueToMessageLimit: " + info.EventsDiscardedDueToMessageLimit + '\n'; Label8.Text = "messageSequence: " + info.MessageSequence + '\n'; Label9.Text = "LastNotificationUtc: " + info.LastNotificationUtc.ToLocalTime().ToString() + '\n'; EventList.DataSource = info.Events; EventList.DataBind(); } </script> <asp:Label runat="server" id="Label0" /><p /> <asp:Label runat="server" id="Label1" /><p /> <asp:Label runat="server" id="Label2" /><p /> <asp:Label runat="server" id="Label3" /><p /> <asp:Label runat="server" id="Label4" /><p /> <asp:Label runat="server" id="Label5" /><p /> <asp:Label runat="server" id="Label6" /><p /> <asp:Label runat="server" id="Label7" /><p /> <asp:Label runat="server" id="Label8" /><p /> <asp:Label runat="server" id="Label9" /><p /> <asp:DataList id="EventList" runat="server"> <ItemTemplate> Event Received Sequence: <%# DataBinder.Eval(Container.DataItem, "EventSequence") %><br> Details: <%# Container.DataItem.ToString() %> </ItemTemplate> </asp:DataList>
アプリケーションからページを要求して、設定をテストします。次のメッセージの例のような件名とメッセージ本体を含む電子メール メッセージが直ちに受信されます。
Subject: Event Notification 1, part 1: <event> Body: EventsDiscardedByBuffer: 0 EventsInBuffer: 0 NotificationSequence: 1 NotificationType: Flush EventsInNotification: 1 EventsRemaining: 0 MessagesInNotification: 1 eventsDiscardedDueToMessageLimit: 0 messageSequence: 1 LastNotificationUtc: 1/1/0001 12:00:00 AM Event Received Sequence: 1 Details: <event information>
参照
参照
healthMonitoring 要素 (ASP.NET 設定スキーマ)
healthMonitoring の eventMappings 要素 (ASP.NET 設定スキーマ)
healthMonitoring の providers 要素 (ASP.NET 設定スキーマ)
healthMonitoring の rules 要素 (ASP.NET 設定スキーマ)