ChangePassword.OnSendingMail(MailMessageEventArgs) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menaikkan SendingMail peristiwa sebelum pesan email dikirim ke server SMTP untuk diproses. Server SMTP kemudian mengirim pesan email kepada pengguna.
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
Objek MailMessageEventArgs yang berisi data peristiwa.
Contoh
Contoh kode berikut menunjukkan halaman ASP.NET yang menggunakan ChangePassword kontrol Web, dan menyertakan penanganan aktivitas untuk SendingMail peristiwa bernama SendingMail
. Contoh kode mengasumsikan bahwa situs Web ASP.NET telah dikonfigurasi untuk menggunakan keanggotaan ASP.NET dan autentikasi Formulir, dan bahwa pengguna telah dibuat yang nama dan kata sandinya diketahui oleh Anda. Untuk informasi selengkapnya, lihat Cara: Menerapkan Autentikasi Formulir Sederhana.
Jika perubahan kata sandi berhasil, kode mencoba menggunakan SMTP untuk mengirim pesan email kepada pengguna untuk mengonfirmasi perubahan. Ini dilakukan di penangananSendingMail
aktivitas. Untuk informasi tentang cara mengonfigurasi server SMTP, lihat Cara: Menginstal dan Mengonfigurasi Server Virtual SMTP di IIS 6.0. Untuk tujuan contoh ini, tidak perlu mengonfigurasi server SMTP; contoh dibuat untuk menguji kegagalan mengirim pesan email.
Jika server email tidak dikonfigurasi dengan benar atau terjadi kesalahan lain dan pesan email tidak dapat dikirim, SendMailError
fungsi akan dipanggil. Pesan ditampilkan kepada pengguna. Selain itu, peristiwa dicatat ke log peristiwa Aplikasi Windows dengan asumsi bahwa sumber peristiwa bernama MySamplesSite sudah ada. Lihat contoh kode di bawah ini untuk membuat sumber peristiwa yang ditentukan. Untuk informasi selengkapnya tentang membuat sumber kejadian, lihat Penanganan Peristiwa Server di Halaman Formulir Web ASP.NET. Properti HandledSendMailErrorEventArgs objek diatur ke true
untuk menunjukkan bahwa kesalahan telah ditangani.
<%@ 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>
Gunakan contoh kode berikut jika Anda perlu menambahkan sumber peristiwa bernama MySamplesSite secara terprogram ke log Aplikasi Anda. Sumber kejadian ini harus ada agar contoh kode pertama berfungsi dengan benar. Contoh kode berikut memerlukan hak istimewa Administrator.
#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
Contoh kode berikut dapat digunakan sebagai file ChangePasswordMail.htm untuk kode contoh sebelumnya.
Penting
Mengirim nama akun pengguna atau kata sandi dalam email adalah potensi ancaman keamanan. Pesan email biasanya dikirim dalam teks biasa dan dapat dibaca oleh aplikasi "sniffing" jaringan khusus. Untuk meningkatkan keamanan, gunakan mitigasi yang dijelaskan dalam Mengamankan Kontrol Login.
<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>
Keterangan
OnSendingMail Gunakan metode untuk mengubah pesan email yang dikirim ke pengguna setelah mereka mengubah kata sandi mereka. Properti MessageMailMessageEventArgs objek akan dikirim ke server SMTP untuk diproses. Ubah properti MailMessage objek untuk mengubah pesan email.
Pesan email dibuat hanya ketika BodyFileName properti MailDefinition objek yang ditentukan oleh MailDefinition properti menunjuk ke nama file yang valid.
Penting
Mengirim nama akun pengguna atau kata sandi dalam email adalah potensi ancaman keamanan. Pesan email biasanya dikirim dalam teks biasa dan dapat dibaca oleh aplikasi "sniffing" jaringan khusus. Untuk meningkatkan keamanan, gunakan mitigasi yang dijelaskan dalam Mengamankan Kontrol Login.
Menaikkan peristiwa memanggil penanganan aktivitas melalui delegasi. Untuk informasi selengkapnya, lihat Penanganan Peristiwa Server di Halaman Formulir Web ASP.NET.
Metode ini OnSendingMail juga memungkinkan kelas turunan untuk menangani peristiwa tanpa melampirkan delegasi. Ini adalah teknik yang disukai untuk menangani peristiwa di kelas turunan.
Catatan Bagi Inheritor
Saat mengambil alih metode di kelas turunan OnSendingMail(MailMessageEventArgs) , pastikan untuk memanggil OnSendingMail(MailMessageEventArgs) metode untuk kelas dasar sehingga delegasi terdaftar menerima peristiwa tersebut.
Berlaku untuk
Lihat juga
- OnBubbleEvent(Object, EventArgs)
- SendingMail
- Penanganan Peristiwa Server di Halaman Web ASP.NET
- ASP.NET Gambaran Umum Kontrol Login
- Menyesuaikan Tampilan dan Perilaku Kontrol Login ASP.NET
- Templat Kontrol Server Web ASP.NET
- Cara: Menampilkan Informasi Yang Berbeda untuk Pengguna Anonim dan Masuk
- Tab Keamanan Alat Administrasi Situs Web
- Mengamankan Kontrol Login
- Praktik Keamanan Dasar untuk Aplikasi Web
- Mengamankan Keanggotaan