ChangePassword.OnSendingMail(MailMessageEventArgs) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Löst das SendingMail-Ereignis aus, bevor eine E-Mail zur Verarbeitung an den SMTP-Server gesendet wird. Der SMTP-Server sendet dann die E-Mail an den Benutzer.
protected:
virtual void OnSendingMail(System::Web::UI::WebControls::MailMessageEventArgs ^ e);
protected virtual void OnSendingMail (System.Web.UI.WebControls.MailMessageEventArgs e);
abstract member OnSendingMail : System.Web.UI.WebControls.MailMessageEventArgs -> unit
override this.OnSendingMail : System.Web.UI.WebControls.MailMessageEventArgs -> unit
Protected Overridable Sub OnSendingMail (e As MailMessageEventArgs)
Parameter
Ein MailMessageEventArgs-Objekt, das Ereignisdaten enthält.
Beispiele
Das folgende Codebeispiel veranschaulicht eine ASP.NET Seite, die ein ChangePassword Websteuerelement verwendet, und enthält einen Ereignishandler für das Ereignis mit dem SendingMail Namen SendingMail
. Im Codebeispiel wird davon ausgegangen, dass die ASP.NET-Website für die Verwendung ASP.NET Mitgliedschaft und Formularauthentifizierung konfiguriert wurde und dass ein Benutzer erstellt wurde, dessen Name und Kennwort Ihnen bekannt sind. Weitere Informationen finden Sie unter Vorgehensweise: Implementieren der Authentifizierung für einfache Formulare.
Wenn die Kennwortänderung erfolgreich ist, versucht der Code, SMTP zu verwenden, um eine E-Mail-Nachricht an den Benutzer zu senden, um die Änderung zu bestätigen. Dies erfolgt imSendingMail
Ereignishandler. Informationen zum Konfigurieren eines SMTP-Servers finden Sie unter Vorgehensweise: Installieren und Konfigurieren virtueller SMTP-Server 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 werden kann.
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. Dem Benutzer wird eine Meldung angezeigt. Darüber hinaus wird ein Ereignis im Ereignisprotokoll der Windows-Anwendung protokolliert, wobei davon ausgegangen wird, dass bereits eine Ereignisquelle mit dem Namen MySamplesSite vorhanden ist. Sehen Sie sich das codebeispiel unten an, um die angegebene Ereignisquelle zu erstellen. Weitere Informationen zum Erstellen einer Ereignisquelle finden Sie unter Serverereignisbehandlung in ASP.NET Web Forms-Seiten. Die Handled -Eigenschaft des SendMailErrorEventArgs -Objekts wird auf true
festgelegt, um anzugeben, 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 ihrem Anwendungsprotokoll programmgesteuert die Ereignisquelle MySamplesSite 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
Der folgende Beispielcode kann als ChangePasswordMail.htm-Datei für den vorherigen Beispielcode verwendet werden.
Wichtig
Das Senden von Benutzernamen oder Kennwörtern per E-Mail stellt eine potenzielle Sicherheitsbedrohung dar. E-Mail-Nachrichten werden in der Regel als Nur-Text gesendet und können von speziellen Netzwerkanwendungen gelesen werden. Um die Sicherheit zu verbessern, verwenden Sie die Unter Sichern von Anmeldesteuerelementen beschriebenen Entschärfungen.
<html>
<head><title></title></head>
<body>
<form>
<h1>Your password for the account named "<%Username%>" has changed.</h1>
<p>
If you did not initiate this change, please call 1-206-555-0100.
</p>
<p>
<a href="http://www.contoso.com/login.aspx">
<img src="cid:LoginGif" alt="Log In" />
</a>
</p>
<p>
Please read our attached Privacy Notice.
</p>
</form>
</body>
</html>
Hinweise
Verwenden Sie die OnSendingMail -Methode, um die E-Mail-Nachricht zu ändern, die an Benutzer gesendet wird, nachdem sie ihr Kennwort geändert haben. Die Message -Eigenschaft des MailMessageEventArgs -Objekts wird zur Verarbeitung an den SMTP-Server gesendet. Ändern Sie die Eigenschaften des MailMessage -Objekts, um die E-Mail-Nachricht zu ändern.
E-Mail-Nachrichten werden nur erstellt, wenn die BodyFileName -Eigenschaft des MailDefinition durch die MailDefinition -Eigenschaft angegebenen Objekts auf einen gültigen Dateinamen verweist.
Wichtig
Das Senden von Benutzernamen oder Kennwörtern per E-Mail stellt eine potenzielle Sicherheitsbedrohung dar. E-Mail-Nachrichten werden in der Regel als Nur-Text gesendet und können von speziellen Netzwerkanwendungen gelesen werden. Um die Sicherheit zu verbessern, verwenden Sie die Unter Sichern von Anmeldesteuerelementen beschriebenen Entschärfungen.
Durch das Auslösen eines Ereignisses wird der Ereignishandler über einen Delegaten aufgerufen. Weitere Informationen finden Sie unter Serverereignisbehandlung in ASP.NET Web Forms-Seiten.
Mit der OnSendingMail-Methode können auch abgeleitete Klassen das Ereignis ohne Anfügen eines Delegaten behandeln. Dies ist das bevorzugte Verfahren für die Behandlung des Ereignisses in einer abgeleiteten Klasse.
Hinweise für Vererber
Wenn Sie die OnSendingMail(MailMessageEventArgs) -Methode in einer abgeleiteten Klasse überschreiben, achten Sie darauf, die OnSendingMail(MailMessageEventArgs) Methode für die Basisklasse aufzurufen, damit registrierte Delegaten das Ereignis empfangen.
Gilt für:
Weitere Informationen
- OnBubbleEvent(Object, EventArgs)
- SendingMail
- Serverereignisbehandlung auf ASP.NET Webseiten
- Übersicht über ASP.NET Anmeldesteuerelemente
- Anpassen der Darstellung und des Verhaltens der ASP.NET Anmeldesteuerelemente
- Vorlagen für ASP.NET Webserversteuerelemente
- Vorgehensweise: Anzeigen unterschiedlicher Informationen für anonyme und angemeldete Benutzer
- Registerkarte "Sicherheit" des Websiteverwaltungstools
- Schützen von Anmeldesteuerelementen
- Grundlegende Sicherheitsmaßnahmen für Webanwendungen
- Sichern der Mitgliedschaft