Share via


Cómo: Enviar un correo electrónico para las notificaciones de supervisión de estado

Actualización: noviembre 2007

Puede configurar una aplicación ASP.NET para que envíe una notificación por correo electrónico cuando se produzca un evento Web de supervisión de estado ASP.NET. Para ello, puede configurar uno de los proveedores de eventos Web por correo electrónico disponibles.

El sistema de supervisión de estado de ASP.NET incluye varios proveedores de eventos que consumen datos de eventos Web de supervisión de estado. Sólo los proveedores de eventos EventLogWebEventProvider, SqlWebEventProvider y WmiWebEventProvider están preconfigurados en el archivo Web.config raíz. En este tema se describe cómo agregar opciones de configuración para los proveedores de eventos Web por correo electrónico y cómo permitir que esos proveedores escuchen ciertos eventos.

Para obtener una lista de eventos Web que su proveedor puede escuchar, vea el elemento <eventMappings> del archivo Web.config raíz o vea la sección "Eventos Web" de Información general sobre la supervisión de estado en ASP.NET.

Enviar correo electrónico desde su aplicación Web

Los ejemplos de código de este tema requieren que su aplicación Web esté configurada para enviar mensajes de correo electrónico. En el procedimiento siguiente se muestra cómo configurar su aplicación si ya tiene el servicio Protocolo simple de transferencia de correo (SMTP) instalado y configurado en el servidor Web, y tiene acceso a un servidor SMTP que pueda entregar los mensajes de correo electrónico. Para obtener más información, vea Cómo: Instalar y configurar servidores virtuales SMTP en IIS 6.0.

Para configurar la aplicación ASP.NET para enviar correo electrónico

  • Abra el archivo Web.config de su aplicación y configure el elemento <mailSettings> dentro de la sección <system.net>. Tiene que especificar un método de entrega en el atributo deliveryMethod del elemento <smtp>, así como el nombre del servidor SMTP en el atributo host del elemento <network>. También se recomienda que establezca el atributo defaultCredentials en true. (En los temas de elementos se muestran y documentan otros atributos disponibles.)

    La configuración de conexión podría ser similar al ejemplo siguiente.

    <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>
    

Configurar los proveedores de correo

Para configurar el proveedor de eventos Web SimpleMailWebEventProvider

  1. Abra el archivo Web.config de su aplicación y agregue un nuevo elemento <providers> dentro del elemento <healthMonitoring> de la sección<system.web>. Este nuevo elemento providers es donde configurará el proveedor de eventos Web SimpleMailWebEventProvider. Este proveedor está incluido con el sistema de supervisión de estado de ASP.NET, pero no está preconfigurado en el archivo Web.config raíz.

    La configuración de conexión podría ser similar al ejemplo siguiente.

    <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>
    

    Para este procedimiento, deshabilite el almacenamiento en búfer de eventos estableciendo el atributo buffer en false. El atributo name es arbitrario y se utiliza para identificar el proveedor en el paso siguiente. Cambie los atributos to y from a su propia dirección de correo electrónico para realizar los pasos de prueba más adelante en este procedimiento.

  2. Agregue un nuevo elemento <rules> dentro del elemento <healthMonitoring>. Este nuevo elemento rules configura los proveedores de correo electrónico para que escuchen todos los eventos Web.

    La configuración de conexión podría ser similar al ejemplo siguiente.

    <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>
    

    El atributo provider es igual que el atributo name del elemento providers del paso anterior. El atributo eventName de este elemento rules es igual que el atributo de nombre del elemento eventMappings preconfigurado en el archivo Web.config raíz. Esta configuración enviará un mensaje de correo electrónico por cada evento Web que se produzca en su aplicación ASP.NET. Esto incluye los inicios y detenciones de la aplicación, los cambios de configuración y las solicitudes, pero no se limita a esas acciones.

    Para este procedimiento, defina el elemento rules y el elemento provider del paso anterior en el mismo archivo de configuración. Como alternativa, el elemento provider puede existir en un archivo de configuración que esté más arriba en la cadena de archivos de configuración, hacia el archivo Web.config raíz.

  3. Pruebe la configuración solicitando una página de su aplicación. Es posible que ya haya recibido un mensaje de correo electrónico si cambió opciones de configuración, lo que provocaría un evento de reinicio de la aplicación. El mensaje de correo electrónico que reciba puede tener una línea de asunto y un cuerpo del mensaje similar al mensaje de ejemplo siguiente.

    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 --------------- ---------------

Para configurar el proveedor de eventos Web TemplatedMailWebEventProvider

  1. Abra el archivo Web.config de su aplicación y agregue un nuevo elemento <providers> dentro del elemento <healthMonitoring> de la sección<system.web>. Este nuevo elemento providers es donde configurará el proveedor de eventos Web TemplatedMailWebEventProvider. Este proveedor está incluido con el sistema de supervisión de estado de ASP.NET, pero no está preconfigurado en el archivo Web.config raíz.

    La configuración de conexión podría ser similar al ejemplo siguiente.

    <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>
    

    Para este procedimiento, habilite el almacenamiento en búfer de eventos estableciendo el atributo buffer en false. El valor del atributo bufferMode, Notification, está predefinido en el archivo Web.config raíz. Para obtener más información acerca del almacenamiento en búfer, vea Extender eventos de supervisión de estado de ASP.NET.

    El atributo name es arbitrario y se utiliza para identificar el proveedor en el paso siguiente. Cambie los atributos to y from a su propia dirección de correo electrónico para realizar los pasos de prueba más adelante en este procedimiento.

  2. Agregue un nuevo elemento <rules> dentro del elemento <healthMonitoring>. Este nuevo elemento rules configura los proveedores de correo electrónico para que escuchen todos los eventos Web.

    La configuración de conexión podría ser similar al ejemplo siguiente.

    <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>
    

    El atributo provider es igual que el atributo name del elemento providers del paso anterior. El atributo eventName de este atributo rules es igual que el atributo name del elemento eventMappings preconfigurado en el archivo Web.config raíz. Esta configuración enviará un mensaje de correo electrónico por cada solicitud realizada a una página u otro recurso de la aplicación ASP.NET.

  3. Cree un archivo plantilla de correo electrónico denominado Template.aspx y póngalo en la raíz de la aplicación. Este nombre de archivo es el valor del atributo template del elemento providers. Cuando se produce un evento de solicitud en la aplicación, el archivo plantilla se llena con datos que utilizan expresiones de cadena y se envía como mensaje de correo electrónico de notificación. Para obtener información acerca de cómo utilizar expresiones, vea Información general sobre expresiones ASP.NET.

    El archivo plantilla podría ser similar al ejemplo siguiente.

    <%@ 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>
    
  4. Pruebe la configuración solicitando una página de su aplicación. Debe recibir rápidamente un mensaje de correo electrónico que incluya una línea de asunto y un cuerpo del mensaje similar al mensaje del ejemplo siguiente.

    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>
    

Vea también

Referencia

Elemento healthMonitoring (esquema de configuración de ASP.NET)

Elemento eventMappings para healthMonitoring (Esquema de configuración de ASP.NET)

Elemento providers para healthMonitoring (Esquema de configuración de ASP.NET)

Elemento rules para healthMonitoring (Esquema de configuración de ASP.NET)

<smtp> (Elemento, Configuración de red)

Otros recursos

Información general sobre la supervisión de estado en ASP.NET

Almacenar en búfer eventos de supervisión de estado de ASP.NET

Configurar la supervisión de estado en ASP.NET