SendMailErrorEventArgs Klasse

Definition

Stellt Daten für das SendMailError-Ereignis von Steuerelementen wie ChangePassword, CreateUserWizard und PasswordRecovery bereit.

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

Beispiele

Im folgenden Codebeispiel wird eine ASP.NET Seite veranschaulicht, die ein ChangePassword Websteuerelement verwendet und einen Ereignishandler für das Ereignis mit dem SendMailError Namen SendMailError enthält. Im Codebeispiel wird davon ausgegangen, dass die ASP.NET Website für die Verwendung ASP.NET Mitgliedschafts- und Formularauthentifizierung konfiguriert wurde und dass ein Benutzer erstellt wurde, dessen Name und Kennwort Ihnen bekannt sind. Weitere Informationen finden Sie unter How to: Implement Simple Forms Authentication.

Wenn die Kennwortänderung erfolgreich verläuft, versucht der Code im SendingMail Ereignishandler, eine E-Mail-Nachricht an den Benutzer zu senden, um die Änderung zu bestätigen. SMTP muss bereits auf dem Server konfiguriert werden, damit dieses Codebeispiel funktioniert. Informationen zum Konfigurieren eines SMTP-Servers finden Sie unter How to: Install and Configure SMTP Virtual Servers in IIS 6.0. Für die Zwecke dieses Beispiels ist es nicht erforderlich, einen SMTP-Server zu konfigurieren; Das Beispiel wird erstellt, um zu testen, dass eine E-Mail-Nachricht nicht gesendet wird.

Wenn ein E-Mail-Server nicht ordnungsgemäß konfiguriert ist oder ein anderer Fehler auftritt und die E-Mail-Nachricht nicht gesendet werden kann, wird die SendMailError Funktion aufgerufen. Eine Nachricht wird dem Benutzer angezeigt. Darüber hinaus wird ein Ereignis mit der Annahme protokolliert, dass eine Ereignisquelle mit dem Namen MySamplesSite bereits vorhanden ist, im Windows Application-Ereignisprotokoll protokolliert wird. Sehen Sie sich das folgende Codebeispiel an, um die angegebene Ereignisquelle zu erstellen. Weitere Informationen zum Erstellen einer Ereignisquelle finden Sie in der Serverereignisbehandlung in ASP.NET Web Forms Seiten. Die Handled Eigenschaft des SendMailErrorEventArgs Objekts wird so festgelegt true , dass der Fehler behandelt wurde.

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

Verwenden Sie das folgende Codebeispiel, wenn Sie die Ereignisquelle "MySamplesSite" programmgesteuert zu Ihrem Anwendungsprotokoll hinzufügen müssen. Diese Ereignisquelle muss vorhanden sein, damit das erste Codebeispiel ordnungsgemäß funktioniert. Im folgenden Codebeispiel sind Administratorrechte erforderlich.

#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

Hinweise

Das SendMailErrorEventArgs Objekt enthält eine Fehlermeldung, die vom SMTP-E-Mail-Anbieter ausgelöst wird, wenn eine E-Mail-Nachricht nicht vom ChangePassword Steuerelement oder vom CreateUserWizard Steuerelement gesendet werden kann. In diesem Fall wird das SendMailErrorEventArgs Objekt an die SendMailErrorEventHandler.

Erstellen Sie eine SendMailErrorEventHandler Stellvertretung zum Behandeln des Ereignisses. Durch die Behandlung des Ereignisses kann Ihre Webanwendung weiterhin ausgeführt werden, auch wenn eine Ausnahme aufgetreten ist. Dies ist nützlich, wenn es nicht wichtig ist, eine E-Mail-Nachricht zu senden. Wenn beispielsweise die Ausnahme auftritt, wenn ein Benutzer über einen Mehrschritt-Assistenten arbeitet, kann es vorteilhaft sein, den Fehler zu protokollieren, eine informative Meldung für den Benutzer anzuzeigen und dem Benutzer das Abschließen des Assistenten zu ermöglichen.

Untersuchen Sie die Exception Eigenschaft, um die tatsächliche Ursache der Ausnahme zu ermitteln. Der häufigste Grund für die Ausnahme ist ein Konfigurationsfehler im <SMTP-Element> (Network Einstellungen) der Computerkonfigurationsdatei. Obwohl während der Entwicklung und debuggen einer Anwendung ein Fehler erkannt wird, können E-Mail-Server unerwartet in einer Produktionsumgebung fehlschlagen, und Sie müssen ermitteln, ob die gesamte Anwendung in dieser Situation fehlschlägt. Wenn dies nicht der Fall ist, ermöglicht die Behandlung des Ereignisses, dass Ihre Anwendung fortfahren kann.

Sie müssen die Handled Eigenschaft true so festlegen, dass die Ausnahme behandelt wurde. Andernfalls wird die Ausnahme erneut ausgeführt und enthält den ursprünglichen Aufrufstapel und die Fehlermeldung.

Wenn Sie keinen Ereignishandler für das SendMailError Ereignis erstellen oder wenn Sie einen Ereignishandler erstellen, aber die Eigenschaft falsefestlegen, wird die Handled Webanwendung beendet, wenn beim Senden einer E-Mail-Nachricht ein Fehler auftritt, und ASP.NET eine Fehlermeldung anzeigt.

Die OnSendMailError Methode ermöglicht auch abgeleitete Klassen, das Ereignis zu behandeln, anstatt dies durch die SendMailErrorEventHandler. Dies ist die bevorzugte Methode für die Behandlung des Ereignisses in einer Klasse, die von ChangePassword oder CreateUserWizard.

Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Server event Handling in ASP.NET Web Forms Pages.

Hinweise für Vererber

Achten Sie beim Außerkraftsetzen OnSendMailError(SendMailErrorEventArgs) in einer abgeleiteten Klasse darauf, die OnSendMailError(SendMailErrorEventArgs) Methode der Basisklasse aufzurufen, um registrierte Stellvertretungen für den Empfang des Ereignisses zu aktivieren.

Konstruktoren

SendMailErrorEventArgs(Exception)

Initialisiert eine neue Instanz der SendMailErrorEventArgs-Klasse.

Eigenschaften

Exception

Gibt die Ausnahme zurück, die vom SMTP-Maildienst ausgelöst wird, wenn eine E-Mail nicht gesendet werden kann.

Handled

Gibt an, ob die in der Exception-Eigenschaft enthaltene SMTP-Ausnahme behandelt wurde.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für:

Siehe auch