SendMailErrorEventHandler Delegasikan
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.
Mewakili metode yang menangani SendMailError
peristiwa kontrol seperti ChangePassword kontrol, CreateUserWizard kontrol, dan PasswordRecovery kontrol.
public delegate void SendMailErrorEventHandler(System::Object ^ sender, SendMailErrorEventArgs ^ e);
public delegate void SendMailErrorEventHandler(object sender, SendMailErrorEventArgs e);
type SendMailErrorEventHandler = delegate of obj * SendMailErrorEventArgs -> unit
Public Delegate Sub SendMailErrorEventHandler(sender As Object, e As SendMailErrorEventArgs)
Parameter
- sender
- Object
Sumber dari peristiwa tersebut.
Objek SendMailErrorEventArgs yang berisi data peristiwa.
Contoh
Contoh kode berikut menunjukkan halaman ASP.NET yang menggunakan ChangePassword kontrol Web, dan menyertakan penanganan aktivitas untuk SendMailError peristiwa bernama SendMailError
. 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 dalam penanganan SendingMail
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 beberapa kesalahan lain terjadi 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
Keterangan
Saat membuat SendMailErrorEventHandler delegasi, Anda mengidentifikasi metode yang akan menangani peristiwa. Untuk mengaitkan peristiwa dengan penanganan aktivitas, tambahkan instans delegasi ke peristiwa. Penanganan aktivitas dipanggil setiap kali peristiwa terjadi, kecuali Anda menghapus delegasi dari peristiwa. Untuk informasi selengkapnya tentang delegasi penanganan aktivitas, lihat Penanganan Peristiwa Server di Halaman Formulir Web ASP.NET.
Menangani peristiwa memungkinkan SendMailError
aplikasi Web Anda untuk terus berjalan, bahkan jika pengecualian terjadi saat mencoba mengirim pesan email. Misalnya, ini berguna jika pengecualian terjadi saat pengguna bekerja melalui wizard multi-langkah. Lebih baik mencatat kesalahan, menampilkan pesan informatif kepada pengguna, dan memungkinkan pengguna untuk menyelesaikan wizard daripada mengakhiri aplikasi.
Jika Anda tidak membuat penanganan aktivitas untuk peristiwa tersebut SendMailError , atau jika Anda membuat penanganan aktivitas tetapi membiarkan Handled properti diatur ke false
, aplikasi Web Anda akan berhenti berjalan jika terjadi kesalahan saat mengirim pesan email, dan ASP.NET akan menampilkan pesan kesalahan.
Metode ini OnSendMailError juga memungkinkan kelas turunan untuk menangani peristiwa alih-alih SendMailErrorEventHandler. Ini adalah teknik yang disukai untuk menangani peristiwa di kelas yang berasal dari ChangePassword atau CreateUserWizard.
Untuk informasi selengkapnya tentang menangani peristiwa, lihat Penanganan Peristiwa Server di Halaman Formulir Web ASP.NET.
Metode Ekstensi
GetMethodInfo(Delegate) |
Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan. |