SendMailErrorEventHandler Delegát

Definice

Představuje metodu, která zpracovává SendMailError událost ovládacích prvků, jako je ChangePassword ovládací prvek, CreateUserWizard ovládací prvek a PasswordRecovery ovládací prvek.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

Zdroj událostiThe source of the event.

e
SendMailErrorEventArgs

SendMailErrorEventArgsObjekt, který obsahuje data události.A SendMailErrorEventArgs object that contains the event data.

Příklady

Následující příklad kódu ukazuje stránku ASP.NET, která používá ChangePassword webový ovládací prvek, a obsahuje obslužnou rutinu události pro SendMailError událost s názvem 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. Příklad kódu předpokládá, že web ASP.NET byl nakonfigurován tak, aby používal ověřování ASP.NET členství a formulářů a aby byl uživatel vytvořen, jehož jméno a heslo jsou pro vás známy.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. Další informace naleznete v tématu How to: Implementing Simple Forms Authentication.For more information, see How to: Implement Simple Forms Authentication.

Pokud je změna hesla úspěšná, kód se pokusí použít protokol SMTP k odeslání e-mailové zprávy uživateli k potvrzení změny.If the password change succeeds, the code attempts to use SMTP to send an email message to the user to confirm the change. To se provádí v SendingMail obslužné rutině události.This is done in the SendingMail event handler. Informace o tom, jak nakonfigurovat server SMTP, najdete v tématu Postupy: instalace a konfigurace virtuálních serverů SMTP ve službě 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. Pro účely tohoto příkladu není nutné konfigurovat server SMTP. Příklad je vytvořen pro otestování neúspěšného odeslání e-mailové zprávy.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.

Pokud není poštovní server správně nakonfigurovaný nebo dojde k nějaké jiné chybě a e-mailovou zprávu nelze odeslat, SendMailError je volána funkce.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. Uživateli se zobrazí zpráva.A message is displayed to the user. Kromě toho je událost zaznamenána do protokolu událostí aplikace systému Windows s předpokladem, že zdroj události s názvem MySamplesSite již existuje.In addition, an event is logged to the Windows Application event log with the assumption that an event source named MySamplesSite already exists. V následujícím příkladu kódu se vytvoří zadaný zdroj události.See the code example below to create the specified event source. Další informace o vytváření zdrojů událostí najdete v tématu zpracování událostí serveru na stránkách webových formulářů ASP.NET.For more information about creating an event source, see Server Event Handling in ASP.NET Web Forms Pages. HandledVlastnost SendMailErrorEventArgs objektu je nastavena na hodnotu, která true označuje, že chyba byla zpracována.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>

Použijte následující příklad kódu, pokud potřebujete programově přidat do protokolu aplikace zdroj události s názvem MySamplesSite.Use the following code example if you need to programmatically add the event source named MySamplesSite to your Application log. Aby byl první příklad kódu správně fungovat, musí tento zdroj události existovat v uvedeném pořadí.This event source must exist in order for the first code example to work correctly. Následující příklad kódu vyžaduje oprávnění správce.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

Poznámky

Při vytváření SendMailErrorEventHandler delegáta identifikujete metodu, která událost zpracuje.When you create a SendMailErrorEventHandler delegate, you identify the method that will handle the event. Chcete-li přidružit událost k obslužné rutině události, přidejte do události instanci delegáta.To associate the event with the event handler, add an instance of the delegate to the event. Obslužná rutina události je volána vždy, když dojde k události, pokud z události neodeberete delegáta.The event handler is called whenever the event occurs, unless you remove the delegate from the event. Další informace o delegátech obslužných rutin událostí najdete v tématu zpracování událostí serveru na stránkách webových formulářů ASP.NET.For more information about event-handler delegates, see Server Event Handling in ASP.NET Web Forms Pages.

Zpracování SendMailError události umožňuje, aby webová aplikace pokračovala v běhu i v případě, že při pokusu o odeslání e-mailové zprávy dojde k výjimce.Handling the SendMailError event allows your Web application to continue running, even if an exception occurs when trying to send an email message. To je užitečné například v případě, že k výjimce dojde, když uživatel pracuje prostřednictvím Průvodce více kroky.For example, this is useful if the exception occurs when a user is working through a multi-step wizard. Je vhodnější protokolovat chybu, zobrazit informativní zprávu uživateli a dát uživateli možnost Dokončit průvodce místo ukončení aplikace.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.

Pokud nevytvoříte obslužnou rutinu události pro SendMailError událost, nebo pokud vytvoříte obslužnou rutinu události, ale necháte Handled vlastnost nastavenou na false , přestane vaše webová aplikace běžet, pokud při odesílání e-mailové zprávy dojde k chybě, a v ASP.NET se zobrazí chybová zpráva.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 také umožňuje odvozeným třídám zpracovávat události namísto SendMailErrorEventHandler .The OnSendMailError method also allows derived classes to handle the event instead of the SendMailErrorEventHandler. Toto je upřednostňovaná metoda pro zpracování události ve třídě, která je odvozena z ChangePassword nebo CreateUserWizard .This is the preferred technique for handling the event in a class that is derived from ChangePassword or CreateUserWizard.

Další informace o zpracování událostí naleznete v tématu zpracování událostí serveru na stránkách webových formulářů ASP.NET.For more information about handling events, see Server Event Handling in ASP.NET Web Forms Pages.

Metody rozšíření

GetMethodInfo(Delegate)

Získává objekt, který představuje metodu reprezentovanou zadaným delegátem.Gets an object that represents the method represented by the specified delegate.

Platí pro

Viz také