SendMailErrorEventArgs Třída

Definice

Poskytuje data pro SendMailError událost ovládacích prvků, jako ChangePassword je ovládací prvek, CreateUserWizard ovládací prvek a PasswordRecovery ovládací prvek.

public ref class SendMailErrorEventArgs : EventArgs
public class SendMailErrorEventArgs : EventArgs
type SendMailErrorEventArgs = class
    inherit EventArgs
Public Class SendMailErrorEventArgs
Inherits EventArgs
Dědičnost
SendMailErrorEventArgs

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 tak, aby používal 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 změna hesla proběhne úspěšně, kód v obslužné rutině SendingMail události se pokusí odeslat uživateli e-mailovou zprávu, aby změnu potvrdil. Aby tento příklad kódu fungoval, musí být na serveru již nakonfigurovaný protokol SMTP. Informace o konfiguraci serveru SMTP najdete 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 k testování selhání odeslání e-mailové zprávy.

Pokud poštovní server není správně nakonfigurovaný nebo dojde k jiné chybě a e-mailovou zprávu nelze odeslat, SendMailError zavolá se 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álosti s názvem MySamplesSite již existuje. V následujícím příkladu kódu můžete vytvořit zadaný zdroj událostí. Další informace o vytvoření zdroje událostí najdete v tématu Zpracování událostí serveru v ASP.NET Web Forms Pages. Vlastnost Handled objektu je nastavena SendMailErrorEventArgs na true indikaci, ž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>

Pokud potřebujete do aplikačního protokolu programově přidat zdroj událostí MySamplesSite, použijte následující příklad kódu. Tento zdroj událostí 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

Objekt SendMailErrorEventArgs obsahuje chybovou zprávu, která je vyvolána poskytovatelem pošty SMTP, když nelze odeslat e-mailovou ChangePassword zprávu ovládacím prvku nebo ovládacím CreateUserWizard prvku. V takovém případě SendMailErrorEventArgs se objekt odešle do objektu SendMailErrorEventHandler.

Vytvořte delegáta pro SendMailErrorEventHandler zpracování události. Zpracování události umožňuje webové aplikaci pokračovat v provozu, i když došlo k výjimce. To je užitečné, když není důležité odeslat e-mailovou zprávu. Pokud například dojde k výjimce, když uživatel pracuje prostřednictvím vícekrokového průvodce, může být výhodné chybu protokolovat, zobrazit uživateli informativní zprávu a umožnit uživateli dokončit průvodce.

Exception Prozkoumejte vlastnost a určete skutečnou příčinu výjimky. Nejčastějším důvodem výjimky je chyba konfigurace v elementu< smtp> (nastavení sítě) konfiguračního souboru počítače. I když se při vývoji a ladění aplikace obvykle zjistí podobná chyba, poštovní servery můžou neočekávaně selhat v produkčním prostředí a musíte určit, jestli má v této situaci selhat celá aplikace. Pokud ne, zpracování události umožní vaší aplikaci pokračovat.

Vlastnost musíte nastavit Handled na hodnotu, true která signalizovala, že výjimka byla zpracována. V opačném případě se výjimka znovu zobrazí a bude obsahovat původní zásobník volání a chybovou zprávu.

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 aby to prováděla 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í najdete v tématu Zpracování událostí serveru v ASP.NET Web Forms Pages.

Poznámky pro dědice

Při přepsání OnSendMailError(SendMailErrorEventArgs) v odvozené třídě nezapomeňte volat metodu OnSendMailError(SendMailErrorEventArgs) základní třídy, aby mohli registrovaní delegáti přijímat událost.

Konstruktory

SendMailErrorEventArgs(Exception)

Inicializuje novou instanci SendMailErrorEventArgs třídy.

Vlastnosti

Exception

Vrátí výjimku vyvolanou poštovní službou SMTP, když nelze odeslat e-mailovou zprávu.

Handled

Označuje, zda byla zpracována výjimka SMTP obsažená ve Exception vlastnosti.

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také