Comment : envoyer un message électronique pour les notifications de contrôle d'état
Mise à jour : novembre 2007
Vous pouvez configurer une application ASP.NET pour envoyer une notification par courrier électronique lorsqu'un événement Web de contrôle d'état ASP.NET a lieu. Pour ce faire, vous pouvez configurer l'un des fournisseurs d'événements de Web de messagerie électronique disponibles.
Le système de contrôle d'état ASP.NET est fourni avec plusieurs fournisseurs d'événements qui consomment les données d'événement de Web de contrôle d'état. Seuls les fournisseurs d'événements EventLogWebEventProvider, SqlWebEventProvider et WmiWebEventProvider sont préconfigurés dans le fichier racine Web.config. Cette rubrique décrit comment ajouter des paramètres de configuration pour les fournisseurs d'événements de Web de messagerie électronique et comment permettre à ces fournisseurs d'écouter certains événements.
Pour une liste d'événements Web que votre fournisseur peut écouter, consultez l'élément <eventMappings> dans votre fichier racine Web.config ou consulter la section « Événements Web » de Vue d'ensemble du contrôle d'état ASP.NET.
Envoi d'un courrier électronique à partir de votre application Web
Les exemples de code dans cette rubrique nécessitent que votre application Web soit configurée pour envoyer des courriers électroniques. La procédure suivante vous indique comment configurer votre application si le protocole SMTP (Simple Mail Transfer Protocol) est déjà installé et configuré sur votre serveur Web et si vous avez accès à un serveur SMTP qui peut remettre les messages électroniques. Pour plus d'informations, consultez Comment : installer et configurer des serveurs virtuels SMTP dans IIS 6.0.
Pour configurer votre application ASP.NET afin d'envoyer un courrier électronique
Ouvrez le fichier Web.config pour votre application et configurez l'élément <mailSettings> dans la section <system.net>. Vous devez spécifier un mode de remise dans l'attribut deliveryMethod de l'élément <smtp> et le nom du serveur SMTP dans l'attribut host de l'élément <network>. Il est également recommandé d'affecter true à l'attribut defaultCredentials. (D'autres attributs sont disponibles et sont documentés dans les rubriques de l'élément.)
Vos paramètres de configuration peuvent ressembler à l'exemple suivant.
<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>
Configuration des fournisseurs de messagerie
Pour configurer le fournisseur d'événements Web SimpleMailWebEventProvider
Ouvrez le fichier Web.config pour votre application et ajoutez un nouvel élément <providers> dans l'élément <healthMonitoring> de la section <system.web>. Ce nouvel élément providers est l'emplacement où vous configurerez le fournisseur d'événements Web SimpleMailWebEventProvider. Ce fournisseur est inclus avec le système de contrôle d'état ASP.NET, mais il n'est pas préconfiguré pour vous dans le fichier racine Web.config.
Vos paramètres de configuration peuvent ressembler à l'exemple suivant.
<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>
Pour les besoins de cette procédure, désactivez la mise en mémoire tampon d'événement en affectant false à l'attribut buffer. L'attribut name est arbitraire et il est utilisé pour identifier le fournisseur dans l'étape suivante. Remplacez les attributs to et from par votre propre adresse de messagerie pour terminer les étapes de test ultérieurement dans cette procédure.
Ajoutez un nouvel élément <rules> dans l'élément <healthMonitoring>. Ce nouvel élément rules configure les fournisseurs de messagerie électronique pour écouter tous les événements Web.
Vos paramètres de configuration peuvent ressembler à l'exemple suivant.
<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>
L'attribut provider est le même que l'attribut name de votre élément providers de l'étape précédente. L'attribut eventName de cet élément rules est le même que l'attribut de nom de l'élément eventMappings préconfiguré dans le fichier racine Web.config. Cette configuration enverra un message électronique pour chaque événement Web qui se produira dans votre application ASP.NET. Cela inclut, mais pas seulement, le démarrage et l'arrêt de l'application, les modifications apportées à la configuration et les demandes.
Pour les besoins de cette procédure, définissez votre élément rules et votre élément provider de l'étape précédente dans le même fichier de configuration. Votre élément provider peut également exister dans un fichier de configuration qui est plus haut dans la chaîne de fichiers de configuration, vers le fichier racine Web.config.
Testez votre configuration en demandant une page de votre application. Il est possible que vous ayez déjà reçu un message électronique si vous avez modifié des paramètres de configuration, ce qui déclencherait un événement de redémarrage de l'application. Le courrier électronique que vous recevez peut avoir une ligne d'objet et un corps de message semblables à l'exemple de message suivant.
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 --------------- ---------------
Pour configurer le fournisseur d'événements Web TemplatedMailWebEventProvider
Ouvrez le fichier Web.config pour votre application et ajoutez un nouvel élément <providers> dans l'élément <healthMonitoring> de la section <system.web>. Ce nouvel élément providers est l'emplacement où vous configurerez le fournisseur d'événements Web TemplatedMailWebEventProvider. Ce fournisseur est inclus avec le système de contrôle d'état ASP.NET, mais il n'est pas préconfiguré pour vous dans le fichier racine Web.config.
Vos paramètres de configuration peuvent ressembler à l'exemple suivant.
<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>
Pour les besoins de cette procédure, activez la mise en mémoire tampon d'événement en affectant false à l'attribut buffer. La valeur d'attribut bufferMode, Notification, est prédéfinie dans le fichier racine Web.config. Pour plus d'informations sur la mise en mémoire tampon, consultez Extension des événements de contrôle d'état ASP.NET.
L'attribut name est arbitraire et il est utilisé pour identifier le fournisseur dans l'étape suivante. Remplacez les attributs to et from par votre propre adresse de messagerie pour terminer les étapes de test ultérieurement dans cette procédure.
Ajoutez un nouvel élément <rules> dans l'élément <healthMonitoring>. Ce nouvel élément rules configure les fournisseurs de messagerie électronique pour écouter tous les événements Web.
Vos paramètres de configuration peuvent ressembler à l'exemple suivant.
<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>
L'attribut provider est le même que l'attribut name de votre élément providers de l'étape précédente. L'attribut eventName de cet attribut rules est le même que l'attribut name de l'élément préconfiguré eventMappings dans le fichier racine Web.config. Cette configuration enverra un message électronique pour chaque demande faite à une page ou à une autre ressource dans votre application ASP.NET.
Créez un fichier modèle de courrier électronique nommé Template.aspx et placez-le à la racine de votre application. Ce nom de fichier est la valeur de l'attribut template de l'élément providers. Lorsqu'un événement de demande se produit dans votre application, le fichier modèle est rempli avec les données à l'aide d'expressions de chaîne et est envoyé comme message électronique de notification. Pour plus d'informations sur l'utilisation des expressions, consultez Vue d'ensemble des expressions ASP.NET.
Votre fichier modèle peut ressembler à l'exemple suivant.
<%@ Page Language="cs" %> <%@ Import Namespace="System.Web.Management" %> <script > 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 id="Label0" /><p /> <asp:Label id="Label1" /><p /> <asp:Label id="Label2" /><p /> <asp:Label id="Label3" /><p /> <asp:Label id="Label4" /><p /> <asp:Label id="Label5" /><p /> <asp:Label id="Label6" /><p /> <asp:Label id="Label7" /><p /> <asp:Label id="Label8" /><p /> <asp:Label id="Label9" /><p /> <asp:DataList id="EventList" > <ItemTemplate> Event Received Sequence: <%# DataBinder.Eval(Container.DataItem, "EventSequence") %><br> Details: <%# Container.DataItem.ToString() %> </ItemTemplate> </asp:DataList>
Testez votre configuration en demandant une page de votre application. Vous recevrez rapidement un message électronique qui inclut une ligne d'objet et un corps de message semblables à l'exemple de message suivant.
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>
Voir aussi
Référence
healthMonitoring, élément (Schéma des paramètres ASP.NET)
eventMappings, élément de healthMonitoring (Schéma des paramètres ASP.NET)
providers, élément de healthMonitoring (Schéma des paramètres ASP.NET)
rules, élément de healthMonitoring (Schéma des paramètres ASP.NET)
<smtp>, élément (paramètres réseau)
Autres ressources
Vue d'ensemble du contrôle d'état ASP.NET
Mise en mémoire tampon des événements de contrôle d'état ASP.NET