Partilhar via


SendMailErrorEventArgs.Handled Propriedade

Definição

Indica se a exceção de SMTP que está contida na propriedade Exception foi tratada.

public:
 property bool Handled { bool get(); void set(bool value); };
public bool Handled { get; set; }
member this.Handled : bool with get, set
Public Property Handled As Boolean

Valor da propriedade

Se true, a exceção será consumida e tratada pelo delegado SendMailErrorEventHandler. Se false, a exceção será gerada novamente, incluindo a mensagem de erro e a pilha de chamadas original.

O padrão é false.

Exemplos

O exemplo de código a seguir demonstra uma página ASP.NET que usa um ChangePassword controle da Web e inclui um manipulador de eventos para o SendMailError evento chamado SendMailError. O exemplo de código pressupõe que o site do ASP.NET foi configurado para usar ASP.NET associação e autenticação de Formulários e que um usuário foi criado cujo nome e senha são conhecidos por você. Para obter mais informações, consulte Como implementar a autenticação de formulários simples.

Se a alteração de senha for bem-sucedida, o código no SendingMail manipulador de eventos tentará enviar uma mensagem de email ao usuário para confirmar a alteração. O SMTP já deve estar configurado no servidor para que esse exemplo de código funcione. Para obter informações sobre como configurar um servidor SMTP, consulte Como instalar e configurar servidores virtuais SMTP no IIS 6.0. Para os fins deste exemplo, não é necessário configurar um servidor SMTP; o exemplo é construído para testar se há uma falha ao enviar uma mensagem de email.

Se um servidor de email não estiver configurado corretamente ou ocorrer algum outro erro e a mensagem de email não puder ser enviada, a SendMailError função será chamada. Uma mensagem é exibida para o usuário. Além disso, um evento é registrado no log de eventos do Aplicativo windows com a suposição de que já existe uma fonte de eventos chamada MySamplesSite. Consulte o exemplo de código abaixo para criar a origem do evento especificada. Para obter mais informações sobre como criar uma origem de evento, consulte Manipulação de eventos de servidor em páginas do ASP.NET Web Forms. A Handled propriedade do SendMailErrorEventArgs objeto é definida true como para indicar que o erro foi tratado.

<%@ Page Language="C#" AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  void MySendingMail(object sender, MailMessageEventArgs e)
  {
    Message1.Text = "Sent mail to you to confirm the password change.";
  }

  void MySendMailError(object sender, SendMailErrorEventArgs e)
  {
    Message1.Text = "Could not send email to confirm password change.";

    // The MySamplesSite event source has already been created by an administrator.
    System.Diagnostics.EventLog myLog = new System.Diagnostics.EventLog();
    myLog.Log = "Application";
    myLog.Source = "MySamplesSite";
    myLog.WriteEntry(
        "Sending mail via SMTP failed with the following error: " + 
        e.Exception.Message.ToString(), 
        System.Diagnostics.EventLogEntryType.Error);

    e.Handled = true;
  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>ChangePassword including a SendMailError Event</title>
</head>
<body>
  <form id="form1" runat="server">
  <div style="text-align:center">

    <h1>ChangePassword</h1>
    
    <asp:LoginView ID="LoginView1" Runat="server" 
      Visible="true">
      <LoggedInTemplate>
        <asp:LoginName ID="LoginName1" Runat="server" FormatString="You are logged in as {0}." />
        <br />
      </LoggedInTemplate>
      <AnonymousTemplate>
        You are not logged in
      </AnonymousTemplate>
    </asp:LoginView><br />
    
    <asp:ChangePassword ID="ChangePassword1" Runat="server"
      BorderStyle="Solid" 
      BorderWidth="1" 
      CancelDestinationPageUrl="~/Default.aspx" 
      DisplayUserName="true"
      OnSendingMail="MySendingMail" 
      OnSendMailError="MySendMailError" 
      ContinueDestinationPageUrl="~/Default.aspx" >
      <MailDefinition 
        BodyFileName="~\MailFiles\ChangePasswordMail.htm" 
        Subject="Activity information for you">
        <EmbeddedObjects>
          <asp:EmbeddedMailObject Name="LoginGif" Path="~\MailFiles\Login.gif" />
          <asp:EmbeddedMailObject Name="PrivacyNoticeTxt" Path="~\MailFiles\PrivacyNotice.txt" />
        </EmbeddedObjects>
      </MailDefinition>
    </asp:ChangePassword><br />
  
    <asp:Label ID="Message1" Runat="server" ForeColor="Red" /><br />

    <asp:HyperLink ID="HyperLink1" Runat="server" 
      NavigateUrl="~/Default.aspx">
      Home
    </asp:HyperLink>
    
  </div>
  </form>
</body>
</html>
<%@ Page Language="VB" AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

  Public Sub MySendingMail(ByVal Sender As Object, ByVal e As MailMessageEventArgs)
    Message1.Text = "Sent mail to you to confirm the password change."
  End Sub

  Public Sub MySendMailError(ByVal Sender As Object, ByVal e As SendMailErrorEventArgs)
    Message1.Text = "Could not send mail to confirm the password change."
    
    ' The MySamplesSite event source has already been created by an administrator.
    Dim myLog As System.Diagnostics.EventLog
    myLog = new System.Diagnostics.EventLog
    myLog.Log = "Application"
    myLog.Source = "MySamplesSite"
    myLog.WriteEntry("Sending mail via SMTP failed with the following error: " & e.Exception.Message.ToString(), System.Diagnostics.EventLogEntryType.Error)

    e.Handled = True
    
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>ChangePassword including a SendMailError Event</title>
</head>
<body>
  <form id="form1" runat="server">
  <div style="text-align:center">

    <h1>ChangePassword</h1>
    
    <asp:LoginView ID="LoginView1" Runat="server" 
      Visible="true">
      <LoggedInTemplate>
        <asp:LoginName ID="LoginName1" Runat="server" FormatString="You are logged in as {0}." />
        <br />
      </LoggedInTemplate>
      <AnonymousTemplate>
        You are not logged in
      </AnonymousTemplate>
    </asp:LoginView><br />
    
    <asp:ChangePassword ID="ChangePassword1" Runat="server"
      BorderStyle="Solid" 
      BorderWidth="1" 
      CancelDestinationPageUrl="~/Default.aspx" 
      DisplayUserName="true"
      OnSendingMail="MySendingMail" 
      OnSendMailError="MySendMailError" 
      ContinueDestinationPageUrl="~/Default.aspx" >
      <MailDefinition 
        BodyFileName="~\MailFiles\ChangePasswordMail.htm" 
        Subject="Activity information for you">
        <EmbeddedObjects>
          <asp:EmbeddedMailObject Name="LoginGif" Path="~\MailFiles\Login.gif" />
          <asp:EmbeddedMailObject Name="PrivacyNoticeTxt" Path="~\MailFiles\PrivacyNotice.txt" />
        </EmbeddedObjects>
      </MailDefinition>
    </asp:ChangePassword><br />
  
    <asp:Label ID="Message1" Runat="server" ForeColor="Red" /><br />

    <asp:HyperLink ID="HyperLink1" Runat="server" 
      NavigateUrl="~/Default.aspx">
      Home
    </asp:HyperLink>
    
  </div>
  </form>
</body>
</html>

Use o exemplo de código a seguir se precisar adicionar programaticamente a origem do evento chamada MySamplesSite ao log do aplicativo. Essa origem do evento deve existir para que o primeiro exemplo de código funcione corretamente. O exemplo de código a seguir requer privilégios de Administrador.

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

#endregion

namespace CreateEventSource
{
    class Program
    {
        static void Main(string[] args)
        {

            try
            {
                // Create the source, if it does not already exist.
                if (!EventLog.SourceExists("MySamplesSite"))
                {
                    EventLog.CreateEventSource("MySamplesSite", "Application");
                    Console.WriteLine("Creating Event Source");
                }

                // Create an EventLog instance and assign its source.
                EventLog myLog = new EventLog();
                myLog.Source = "MySamplesSite";

                // Write an informational entry to the event log.    
                myLog.WriteEntry("Testing writing to event log.");

                Console.WriteLine("Message written to event log.");
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception:");
                Console.WriteLine("{0}", e.ToString());
            }
        }
    }
}
Imports System.Collections.Generic
Imports System.Text
Imports System.Diagnostics


Namespace CreateEventSource
  Class Program
    Sub Main()

        Try
            ' Create the source, if it does not already exist.
            If Not (EventLog.SourceExists("MySamplesSite")) Then
                EventLog.CreateEventSource("MySamplesSite", "Application")
                Console.WriteLine("Creating Event Source")
            End If

            ' Create an EventLog instance and assign its source.
            Dim myLog As New EventLog
            myLog.Source = "MySamplesSite"

            ' Write an informational entry to the event log.
            myLog.WriteEntry("Testing writing to event log.")

            Console.WriteLine("Message written to event log.")
        Catch e As Exception
            Console.WriteLine("Exception:")
            Console.WriteLine(e.ToString)
        End Try

    End Sub
  End Class
End Namespace

Comentários

A Handled propriedade indica se o Exception foi manipulado. A exceção é gerada pelo provedor de email SMTP quando uma mensagem de email não pode ser enviada pelo ChangePassword controle ou pelo CreateUserWizard. O motivo mais comum para a exceção é um erro de configuração no <elemento smtp> (configurações de rede) do arquivo de configuração do computador. Embora um erro como esse seja normalmente descoberto durante o desenvolvimento e a depuração de um aplicativo, os servidores de email podem falhar inesperadamente em um ambiente de produção e você deve determinar se deseja que todo o aplicativo falhe nessa situação. Caso contrário, o tratamento do evento permite que seu aplicativo continue.

Se você não criar um manipulador de eventos para o SendMailError evento ou se criar um manipulador de eventos, mas deixar a Handled propriedade definida falsecomo , seu aplicativo Web deixará de ser executado se ocorrer um erro ao enviar uma mensagem de email e ASP.NET exibirá uma mensagem de erro. A manipulação do evento permite que seu aplicativo Web continue a ser executado mesmo que tenha ocorrido uma exceção. Isso é útil quando não é essencial enviar uma mensagem de email. Por exemplo, se a exceção ocorrer quando um usuário estiver trabalhando por meio de um assistente de várias etapas, poderá ser vantajoso registrar o erro, exibir uma mensagem informativa para o usuário e permitir que o usuário conclua o assistente.

Aplica-se a

Confira também