SendMailErrorEventArgs Klasa

Definicja

Udostępnia dane dotyczące SendMailError zdarzeń kontrolek, takich jak ChangePassword kontrolka, kontrolka CreateUserWizard i kontrolka PasswordRecovery .

public ref class SendMailErrorEventArgs : EventArgs
public class SendMailErrorEventArgs : EventArgs
type SendMailErrorEventArgs = class
    inherit EventArgs
Public Class SendMailErrorEventArgs
Inherits EventArgs
Dziedziczenie
SendMailErrorEventArgs

Przykłady

Poniższy przykład kodu przedstawia stronę ASP.NET, która używa ChangePassword kontrolki sieci Web i zawiera procedurę obsługi zdarzeń dla SendMailError zdarzenia o nazwie SendMailError. W przykładzie kodu przyjęto założenie, że witryna sieci Web ASP.NET została skonfigurowana do używania ASP.NET członkostwa i uwierzytelniania formularzy oraz że użytkownik został utworzony, którego nazwa i hasło są dla Ciebie znane. Aby uzyskać więcej informacji, zobacz Instrukcje: implementowanie uwierzytelniania prostych formularzy.

Jeśli zmiana hasła powiedzie się, kod w SendingMail procedurze obsługi zdarzeń próbuje wysłać wiadomość e-mail do użytkownika w celu potwierdzenia zmiany. Protokół SMTP musi być już skonfigurowany na serwerze, aby ten przykład kodu działał. Aby uzyskać informacje o sposobie konfigurowania serwera SMTP, zobacz How to: Install and Configure SMTP Virtual Servers in IIS 6.0 (Instrukcje: instalowanie i konfigurowanie serwerów wirtualnych SMTP w usługach IIS 6.0). Na potrzeby tego przykładu nie jest konieczne skonfigurowanie serwera SMTP; przykład jest skonstruowany w celu przetestowania błędu wysyłania wiadomości e-mail.

Jeśli serwer poczty nie jest poprawnie skonfigurowany lub wystąpi inny błąd i nie można wysłać wiadomości e-mail, funkcja jest wywoływana SendMailError . Użytkownikowi zostanie wyświetlony komunikat. Ponadto zdarzenie jest rejestrowane w dzienniku zdarzeń aplikacji systemu Windows z założeniem, że źródło zdarzeń o nazwie MySamplesSite już istnieje. Zobacz poniższy przykład kodu, aby utworzyć określone źródło zdarzeń. Aby uzyskać więcej informacji na temat tworzenia źródła zdarzeń, zobacz Obsługa zdarzeń serwera w ASP.NET Web Forms Pages. Właściwość HandledSendMailErrorEventArgs obiektu jest ustawiona na wartość , aby wskazać true , że błąd został obsłużony.

<%@ 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 zdarzeń o nazwie MySamplesSite do dziennika aplikacji. To źródło zdarzeń musi istnieć, aby pierwszy przykład kodu działał poprawnie. Poniższy przykład kodu wymaga uprawnień administratora.

#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

Obiekt SendMailErrorEventArgs zawiera komunikat o błędzie zgłaszany przez dostawcę poczty SMTP, gdy nie można wysłać wiadomości e-mail przez kontrolkę ChangePassword lub kontrolkę CreateUserWizard . W takim przypadku SendMailErrorEventArgs obiekt jest wysyłany do obiektu SendMailErrorEventHandler.

Utwórz delegata SendMailErrorEventHandler do obsługi zdarzenia. Obsługa zdarzenia umożliwia aplikacji internetowej kontynuowanie działania, nawet jeśli wystąpił wyjątek. Jest to przydatne, gdy wysłanie wiadomości e-mail nie jest krytyczne. Jeśli na przykład wyjątek występuje, gdy użytkownik pracuje za pomocą kreatora wieloetapowego, może być korzystne zarejestrowanie błędu, wyświetlenie komunikatu informacyjnego dla użytkownika i zezwolenie użytkownikowi na ukończenie pracy kreatora.

Sprawdź właściwość, Exception aby określić rzeczywistą przyczynę wyjątku. Najczęstszą przyczyną wyjątku jest błąd konfiguracji w <elemecie smtp> (ustawienia sieci) pliku konfiguracji maszyny. Chociaż błąd podobny do tego jest zwykle wykrywany podczas programowania i debugowania aplikacji, serwery poczty mogą nieoczekiwanie zakończyć się niepowodzeniem w środowisku produkcyjnym i należy określić, czy w takiej sytuacji cała aplikacja nie powiedzie się. Jeśli tak nie jest, obsługa zdarzenia umożliwia kontynuowanie działania aplikacji.

Należy ustawić Handled właściwość tak true , aby sygnalizowała, że wyjątek został obsłużony. W przeciwnym razie wyjątek zostanie ponownie wyrzucony i będzie zawierać oryginalny stos wywołań i komunikat o błędzie.

Jeśli nie utworzysz procedury obsługi zdarzeń dla SendMailError zdarzenia lub utworzysz program obsługi zdarzeń, ale pozostaw Handled właściwość ustawioną na falsewartość , aplikacja internetowa 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.

Metoda OnSendMailError umożliwia również klasom pochodnym obsługę zdarzenia, a nie przez metodę SendMailErrorEventHandler. Jest to preferowana technika obsługi zdarzenia w klasie pochodzącej z ChangePassword klasy lub CreateUserWizard.

Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa zdarzeń serwera w ASP.NET Web Forms Pages.

Uwagi dotyczące dziedziczenia

Podczas zastępowania OnSendMailError(SendMailErrorEventArgs) w klasie pochodnej należy wywołać OnSendMailError(SendMailErrorEventArgs) metodę klasy bazowej, aby umożliwić zarejestrowanym delegatom odbieranie zdarzenia.

Konstruktory

SendMailErrorEventArgs(Exception)

Inicjuje nowe wystąpienie klasy SendMailErrorEventArgs.

Właściwości

Exception

Zwraca wyjątek zgłaszany przez usługę poczty SMTP, gdy nie można wysłać wiadomości e-mail.

Handled

Wskazuje, czy obsługiwany jest wyjątek SMTP zawarty we Exception właściwości.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też