SendMailErrorEventHandler Delegát

Definice

Představuje metodu SendMailError , která zpracovává událost ovládacích prvků, jako ChangePassword je ovládací prvek, CreateUserWizard ovládací prvek a PasswordRecovery ovládací prvek.

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

e
SendMailErrorEventArgs

Objekt SendMailErrorEventArgs , který obsahuje data události.

Příklady

Následující příklad kódu ukazuje ASP.NET stránku, která používá ChangePassword webový ovládací prvek a obsahuje obslužnou rutinu SendMailError události pro událost s názvem SendMailError. Příklad kódu předpokládá, že web ASP.NET byl nakonfigurován pro použití ASP.NET členství a ověřování pomocí formulářů a že byl vytvořen uživatel, jehož jméno a heslo jsou vám známy. Další informace najdete v tématu Postupy: Implementace ověřování pomocí jednoduchých formulářů.

Pokud je změna hesla úspěšná, kód se pokusí pomocí protokolu SMTP odeslat uživateli e-mailovou zprávu, aby změnu potvrdil. To se provádí v obslužné rutině SendingMail události. Informace o konfiguraci serveru SMTP naleznete v tématu Postupy: Instalace a konfigurace virtuálních serverů SMTP ve službě IIS 6.0. Pro účely tohoto příkladu není nutné konfigurovat server SMTP; Příklad je vytvořený tak, aby otestoval, že se nepovedlo odeslat e-mailovou zprávu.

Pokud poštovní server není správně nakonfigurovaný nebo dojde k jiné chybě a e-mailovou zprávu nelze odeslat, SendMailError je volána funkce . Uživateli se zobrazí zpráva. Kromě toho je událost zaznamenána do protokolu událostí aplikace systému Windows s předpokladem, že zdroj událostí s názvem MySamplesSite již existuje. Pokud chcete vytvořit zadaný zdroj událostí, podívejte se na následující příklad kódu. Další informace o vytvoření zdroje událostí naleznete v tématu Zpracování událostí serveru v ASP.NET webových formulářů stránky. Vlastnost Handled objektu je nastavena SendMailErrorEventArgs na hodnotu true , která označuje, že chyba byla zpracována.

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

Následující příklad kódu použijte, pokud potřebujete programově přidat zdroj událostí s názvem MySamplesSite do protokolu aplikace. Tento zdroj události musí existovat, aby první příklad kódu fungoval správně. Následující příklad kódu vyžaduje oprávnění správce.

#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í delegáta SendMailErrorEventHandler identifikujete metodu, která bude zpracovávat událost. Chcete-li přidružit událost k obslužné rutině události, přidejte do události instanci delegáta. Obslužná rutina události je volána vždy, když dojde k události, pokud z události neodeberete delegáta. Další informace o delegátech obslužných rutin událostí naleznete v tématu Zpracování událostí serveru v ASP.NET stránky webových formulářů.

SendMailError Zpracování události umožňuje webové aplikaci pokračovat v provozu, i když při pokusu o odeslání e-mailové zprávy dojde k výjimce. To je například užitečné, pokud k výjimce dochází, když uživatel pracuje prostřednictvím vícekrokového průvodce. Je vhodnější chybu protokolovat, zobrazit uživateli informativní zprávu a umožnit uživateli dokončit průvodce, než ukončit aplikaci.

Pokud pro událost nevytvoříte obslužnou rutinu SendMailError události nebo pokud vytvoříte obslužnou rutinu události, ale necháte Handled vlastnost nastavenou na false, webová aplikace se zastaví, pokud dojde k chybě při odesílání e-mailové zprávy, a ASP.NET zobrazí chybovou zprávu.

Metoda OnSendMailError také umožňuje, aby odvozené třídy zpracovávaly událost místo SendMailErrorEventHandler. Toto je upřednostňovaná technika pro zpracování události ve třídě, která je odvozena z ChangePassword nebo CreateUserWizard.

Další informace o zpracování událostí naleznete v tématu Zpracování událostí serveru v ASP.NET stránky webových formulářů.

Metody rozšíření

GetMethodInfo(Delegate)

Získá objekt, který představuje metodu reprezentovanou zadaným delegátem.

Platí pro

Viz také