ChangePassword.SendingMail 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 antes de que se envíe un correo electrónico al usuario para confirmar que la contraseña se ha cambiado.
public:
event System::Web::UI::WebControls::MailMessageEventHandler ^ SendingMail;
public event System.Web.UI.WebControls.MailMessageEventHandler SendingMail;
member this.SendingMail : System.Web.UI.WebControls.MailMessageEventHandler
Public Custom Event SendingMail As MailMessageEventHandler
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 autenticación de formularios y pertenencia, 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 elSendingMail
controlador de 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 de servidor en ASP.NET Páginas de formularios Web Forms. 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 "examen". 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 ChangePassword control enviará un mensaje de correo electrónico que confirma que la contraseña se ha cambiado cuando la MailDefinition propiedad define un mensaje de correo electrónico que se va a enviar.
El mensaje de correo electrónico contiene campos de reemplazo automático para el nombre de usuario y la contraseña. Puede usar el SendingMail evento para modificar el mensaje de correo electrónico antes de enviarlo al usuario.
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 "examen". Para mejorar la seguridad, use las mitigaciones que se describen en Protección de controles de inicio de sesión.
Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.
Se aplica a
Consulte también
- OnSendingMail(MailMessageEventArgs)
- SendMailError
- Control de eventos de servidor en páginas web de ASP.NET
- Introducción a los controles de inicio de sesión de ASP.NET
- Personalizar 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 iniciados sesión
- 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