SendMailErrorEventHandler Delegat

Definicja

Reprezentuje metodę, która obsługuje SendMailError zdarzenie formantów, takie jak ChangePassword kontrolka, CreateUserWizard formant i PasswordRecovery formant.Represents the method that handles the SendMailError event of controls such as the ChangePassword control, the CreateUserWizard control, and the PasswordRecovery control.

public delegate void SendMailErrorEventHandler(System::Object ^ sender, SendMailErrorEventArgs ^ e);
public delegate void SendMailErrorEventHandler(object sender, SendMailErrorEventArgs e);
type SendMailErrorEventHandler = delegate of obj * SendMailErrorEventArgs -> unit
Public Delegate Sub SendMailErrorEventHandler(sender As Object, e As SendMailErrorEventArgs)

Parametry

sender
Object

Źródło zdarzenia.The source of the event.

e
SendMailErrorEventArgs

SendMailErrorEventArgsObiekt, który zawiera dane zdarzenia.A SendMailErrorEventArgs object that contains the event data.

Dziedziczenie
SendMailErrorEventHandler

Przykłady

Poniższy przykład kodu demonstruje stronę ASP.NET, która używa ChangePassword kontrolki sieci Web i zawiera procedurę obsługi zdarzeń SendMailError o nazwie SendMailError .The following code example demonstrates an ASP.NET page that uses a ChangePassword Web control, and includes an event handler for the SendMailError event named SendMailError. W przykładzie kodu założono, że witryna sieci Web ASP.NET została skonfigurowana tak, aby korzystała z członkostwa ASP.NET i uwierzytelniania formularzy oraz że utworzono użytkownika, którego nazwa i hasło są znane.The code example assumes that the ASP.NET Web site has been configured to use ASP.NET membership and Forms authentication, and that a user has been created whose name and password are known to you. Aby uzyskać więcej informacji, zobacz How to: Implementuj proste uwierzytelnianie formularzy.For more information, see How to: Implement Simple Forms Authentication.

Jeśli zmiana hasła zakończyła się pomyślnie, kod próbuje użyć protokołu SMTP do wysłania wiadomości e-mail do użytkownika w celu potwierdzenia zmiany.If the password change succeeds, the code attempts to use SMTP to send an email message to the user to confirm the change. Jest to realizowane w programie SendingMail obsługi zdarzeń.This is done in the SendingMail event handler. Informacje o sposobach konfigurowania serwera SMTP można znaleźć w temacie How to: Install and configure SMTP Virtual Servers in IIS 6,0.For information about how to configure an SMTP server, see How to: Install and Configure SMTP Virtual Servers in IIS 6.0. Na potrzeby tego przykładu nie jest konieczne konfigurowanie serwera SMTP; przykład został skonstruowany w celu przetestowania pod kątem niepomyślnego wysłania wiadomości e-mail.For the purposes of this example, it is not necessary to configure an SMTP server; the example is constructed to test for a failure to send an email message.

Jeśli serwer poczty nie został prawidłowo skonfigurowany lub Wystąpił inny błąd i nie można wysłać wiadomości e-mail, SendMailError Funkcja jest wywoływana.If a mail server is not configured correctly or some other error occurs and the email message cannot be sent, the SendMailError function is called. Zostanie wyświetlony komunikat.A message is displayed to the user. Ponadto zdarzenie jest rejestrowane w dzienniku zdarzeń aplikacji systemu Windows z założeniem, że źródło zdarzeń o nazwie MySamplesSite już istnieje.In addition, an event is logged to the Windows Application event log with the assumption that an event source named MySamplesSite already exists. Zapoznaj się z poniższym przykładem kodu, aby utworzyć określone źródło zdarzenia.See the code example below to create the specified event source. Aby uzyskać więcej informacji na temat tworzenia źródła zdarzeń, zobacz temat Obsługa zdarzeń serwera na stronach formularzy sieci Web ASP.NET.For more information about creating an event source, see Server Event Handling in ASP.NET Web Forms Pages. HandledWłaściwość SendMailErrorEventArgs obiektu jest ustawiona na tak, aby true wskazywał, że błąd został obsłużony.The Handled property of the SendMailErrorEventArgs object is set to true to indicate that the error has been handled.

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

Użyj poniższego przykładu kodu, jeśli musisz programowo dodać Źródło zdarzenia o nazwie MySamplesSite do dziennika aplikacji.Use the following code example if you need to programmatically add the event source named MySamplesSite to your Application log. To źródło zdarzenia musi istnieć, aby pierwszy przykład kodu działał poprawnie.This event source must exist in order for the first code example to work correctly. Poniższy przykład kodu wymaga uprawnień administratora.The following code example requires Administrator privileges.

#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

Uwagi

Podczas tworzenia SendMailErrorEventHandler delegata należy określić metodę, która będzie obsługiwać zdarzenie.When you create a SendMailErrorEventHandler delegate, you identify the method that will handle the event. Aby skojarzyć zdarzenie z programem obsługi zdarzeń, Dodaj wystąpienie delegata do zdarzenia.To associate the event with the event handler, add an instance of the delegate to the event. Procedura obsługi zdarzeń jest wywoływana za każdym razem, gdy wystąpi zdarzenie, chyba że zostanie usunięty delegat ze zdarzenia.The event handler is called whenever the event occurs, unless you remove the delegate from the event. Aby uzyskać więcej informacji na temat delegatów obsługi zdarzeń, zobacz temat Obsługa zdarzeń serwera na stronach formularzy sieci Web ASP.NET.For more information about event-handler delegates, see Server Event Handling in ASP.NET Web Forms Pages.

Obsługa SendMailError zdarzenia pozwala aplikacji sieci Web na kontynuowanie działania, nawet jeśli wystąpi wyjątek podczas próby wysłania wiadomości e-mail.Handling the SendMailError event allows your Web application to continue running, even if an exception occurs when trying to send an email message. Na przykład jest to przydatne, jeśli wyjątek występuje, gdy użytkownik pracuje za pomocą Kreatora wieloetapowego.For example, this is useful if the exception occurs when a user is working through a multi-step wizard. Zaleca się zarejestrowanie błędu, wyświetlenie komunikatu informacyjnego dla użytkownika i zezwolenie użytkownikowi na ukończenie pracy kreatora, a nie zakończenie działania aplikacji.It is preferable to log the error, display an informative message to the user, and allow the user to complete the wizard rather than terminate the application.

Jeśli nie utworzysz programu obsługi zdarzeń dla SendMailError zdarzenia lub jeśli utworzysz obsługę zdarzeń, ale opuścisz Handled Właściwość ustawioną na false , aplikacja sieci Web przestanie działać, jeśli wystąpi błąd podczas wysyłania wiadomości e-mail, a ASP.NET wyświetli komunikat o błędzie.If you do not create an event handler for the SendMailError event, or if you create an event handler but leave the Handled property set to false, your Web application will stop running if an error occurs when sending an email message, and ASP.NET will display an error message.

OnSendMailErrorMetoda umożliwia również klasom pochodnym obsługę zdarzenia zamiast SendMailErrorEventHandler .The OnSendMailError method also allows derived classes to handle the event instead of the SendMailErrorEventHandler. Jest to preferowana technika obsługi zdarzenia w klasie, która jest pochodną ChangePassword lub CreateUserWizard .This is the preferred technique for handling the event in a class that is derived from ChangePassword or CreateUserWizard.

Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz temat Obsługa zdarzeń serwera na stronach formularzy sieci Web ASP.NET.For more information about handling events, see Server Event Handling in ASP.NET Web Forms Pages.

Metody rozszerzania

GetMethodInfo(Delegate)

Pobiera obiekt, który reprezentuje metodę reprezentowaną przez określony delegat.Gets an object that represents the method represented by the specified delegate.

Dotyczy

Zobacz też