ChangePassword.SendMailError Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce cuando se genera un error SMTP al enviar un mensaje de correo electrónico al usuario.
public:
event System::Web::UI::WebControls::SendMailErrorEventHandler ^ SendMailError;
public event System.Web.UI.WebControls.SendMailErrorEventHandler SendMailError;
member this.SendMailError : System.Web.UI.WebControls.SendMailErrorEventHandler
Public Custom Event SendMailError As SendMailErrorEventHandler
Tipo de evento
Ejemplos
En el ejemplo de código siguiente se muestra una página de ASP.NET que usa un ChangePassword control Web e incluye un controlador de eventos para el SendingMail evento denominado SendingMail
. En el ejemplo de código se supone que el sitio web de ASP.NET se ha configurado para usar ASP.NET pertenencia y autenticación de formularios, y que se ha creado un usuario cuyo nombre y contraseña se conocen. Para obtener más información, vea Cómo: Implementar la autenticación de formularios simples.
Si el cambio de contraseña se realiza correctamente, el código intenta usar SMTP para enviar un mensaje de correo electrónico al usuario para confirmar el cambio. Esto se hace en el controlador deSendingMail
eventos. Para obtener información sobre cómo configurar un servidor SMTP, vea Cómo: Instalar y configurar servidores virtuales SMTP en IIS 6.0. Para los fines de este ejemplo, no es necesario configurar un servidor SMTP; el ejemplo se construye para probar si se produce un error al enviar un mensaje de correo electrónico.
Si un servidor de correo no está configurado correctamente o se produce algún otro error y no se puede enviar el mensaje de correo electrónico, se llama a la SendMailError
función . Se muestra un mensaje al usuario. Además, se registra un evento en el registro de eventos de aplicación de Windows con la suposición de que ya existe un origen de eventos denominado MySamplesSite. Consulte el ejemplo de código siguiente para crear el origen de eventos especificado. Para obtener más información sobre cómo crear un origen de eventos, vea Control de eventos del servidor en ASP.NET páginas de formularios web. La Handled propiedad del SendMailErrorEventArgs objeto se establece en true
para indicar que se ha controlado el error.
<%@ 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>
Use el ejemplo de código siguiente si necesita agregar mediante programación el origen del evento denominado MySamplesSite al registro de la aplicación. Este origen de eventos debe existir para que el primer ejemplo de código funcione correctamente. En el ejemplo de código siguiente se requieren privilegios de administrador.
#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
El código de ejemplo siguiente se puede usar como archivo ChangePasswordMail.htm para el código de ejemplo anterior.
Importante
El envío de nombres de cuenta de usuario o contraseñas por correo electrónico es una amenaza de seguridad potencial. Normalmente, los mensajes de correo electrónico se envían en texto sin formato y se pueden leer mediante aplicaciones especiales de red "sniffing". Para mejorar la seguridad, use las mitigaciones que se describen en Protección de controles de inicio de sesión.
<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>
Comentarios
El SendMailError evento se genera cuando el proveedor de correo SMTP produce una excepción al intentar enviar un mensaje de correo electrónico después de que los usuarios hayan cambiado su contraseña. La razón más común por la que se genera este evento es que la smtp
sección del archivo Web.config es incorrecta. Para obtener más información sobre la smtp
sección, vea <Elemento smtp> (Configuración de red) .
El controlador de eventos predeterminado SendMailError no detecta ni controla el error SMTP del sistema de correo. El SendMailError controlador de eventos debe establecer la Handled propiedad del SendMailErrorEventArgs objeto true
en para impedir que se muestre el error a los usuarios.
Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.
Se aplica a
Consulte también
- OnSendMailError(SendMailErrorEventArgs)
- SendingMail
- Control de eventos de servidor en ASP.NET páginas web
- Introducción a los controles de inicio de sesión de ASP.NET
- Personalización de la apariencia y el comportamiento de los controles de inicio de sesión de ASP.NET
- Plantillas de controles de servidor web de ASP.NET
- Cómo: Mostrar información diferente a usuarios anónimos e conectados
- Pestaña Seguridad de la herramienta de administración de sitios web
- Protección de controles de inicio de sesión
- Prácticas de seguridad básicas para aplicaciones web
- Protección de la pertenencia