ChangePassword.OnSendMailError(SendMailErrorEventArgs) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Déclenche l’événement SendMailError lorsqu’un e-mail ne peut pas être envoyé à l’utilisateur.
protected:
virtual void OnSendMailError(System::Web::UI::WebControls::SendMailErrorEventArgs ^ e);
protected virtual void OnSendMailError (System.Web.UI.WebControls.SendMailErrorEventArgs e);
abstract member OnSendMailError : System.Web.UI.WebControls.SendMailErrorEventArgs -> unit
override this.OnSendMailError : System.Web.UI.WebControls.SendMailErrorEventArgs -> unit
Protected Overridable Sub OnSendMailError (e As SendMailErrorEventArgs)
Paramètres
Objet SendMailErrorEventArgs contenant les données d'événement.
Exemples
L’exemple de code suivant illustre une page ASP.NET qui utilise un ChangePassword contrôle Web et inclut un gestionnaire d’événements pour l’événement SendingMail nommé SendingMail
. L’exemple de code suppose que le site web ASP.NET a été configuré pour utiliser ASP.NET’appartenance et l’authentification par formulaire, et qu’un utilisateur a été créé dont vous connaissez le nom et le mot de passe. Pour plus d’informations, consultez Guide pratique pour implémenter l’authentification par formulaire simple.
Si la modification du mot de passe réussit, le code tente d’utiliser SMTP pour envoyer un message électronique à l’utilisateur pour confirmer la modification. Cette opération est effectuée dans leSendingMail
gestionnaire d’événements. Pour plus d’informations sur la configuration d’un serveur SMTP, consultez Guide pratique pour installer et configurer des serveurs virtuels SMTP dans IIS 6.0. Pour les besoins de cet exemple, il n’est pas nécessaire de configurer un serveur SMTP ; l’exemple est construit pour tester l’échec de l’envoi d’un message électronique.
Si un serveur de messagerie n’est pas configuré correctement ou si une autre erreur se produit et que l’e-mail ne peut pas être envoyé, la SendMailError
fonction est appelée. Un message s’affiche pour l’utilisateur. En outre, un événement est consigné dans le journal des événements des applications Windows avec l’hypothèse qu’une source d’événement nommée MySamplesSite existe déjà. Consultez l’exemple de code ci-dessous pour créer la source d’événement spécifiée. Pour plus d’informations sur la création d’une source d’événements, consultez Gestion des événements de serveur dans ASP.NET pages Web Forms. La Handled propriété de l’objet SendMailErrorEventArgs est définie sur true
pour indiquer que l’erreur a été gérée.
<%@ 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>
Utilisez l’exemple de code suivant si vous devez ajouter par programmation la source d’événement nommée MySamplesSite à votre journal des applications. Cette source d’événement doit exister pour que le premier exemple de code fonctionne correctement. L’exemple de code suivant nécessite des privilèges d’administrateur.
#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
L’exemple de code suivant peut être utilisé comme fichier ChangePasswordMail.htm pour l’exemple de code précédent.
Important
L’envoi de noms de comptes d’utilisateur ou de mots de passe dans un e-mail est une menace potentielle pour la sécurité. Les messages électroniques sont généralement envoyés en texte brut et peuvent être lus par des applications de « reniflage » réseau spéciales. Pour améliorer la sécurité, utilisez les atténuations décrites dans Sécurisation des contrôles de connexion.
<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>
Remarques
La OnSendMailError méthode est appelée lorsque le système de messagerie SMTP lève une exception lors de la tentative d’envoi d’un message électronique après qu’un utilisateur a modifié un mot de passe.
Examinez la Exception propriété de l’objet SendMailErrorEventArgs passé en tant que e
paramètre pour déterminer la cause réelle de l’exception. La raison la plus courante est une erreur de configuration dans la smtp
section du fichier Web.config.
Vous devez définir la Handled propriété de l’objet passé en tant que e
paramètre sur true
pour signaler que l’exception a été prise en charge ; sinon, l’exception est levée à nouveau.
Le déclenchement d'un événement appelle le gestionnaire des événements par l'intermédiaire d'un délégué. Pour plus d’informations, consultez Gestion des événements de serveur dans ASP.NET pages Web Forms.
La méthode OnSendMailError permet également aux classes dérivées de gérer l'événement sans y attacher de délégué. Il s'agit de la méthode recommandée pour gérer l'événement dans une classe dérivée.
Notes pour les héritiers
Lorsque vous remplacez la OnSendMailError(SendMailErrorEventArgs) méthode dans une classe dérivée, veillez à appeler la méthode pour la OnSendMailError(SendMailErrorEventArgs) classe de base afin que les délégués inscrits reçoivent l’événement.
S’applique à
Voir aussi
- OnBubbleEvent(Object, EventArgs)
- Gestion des événements serveur dans ASP.NET pages web
- vue d’ensemble des contrôles de connexion ASP.NET
- Personnalisation de l’apparence et du comportement des contrôles de connexion ASP.NET
- modèles de contrôles de serveur web ASP.NET
- Guide pratique pour afficher différentes informations aux utilisateurs anonymes et connectés
- Onglet Sécurité de l’outil d’administration de site web
- Sécurisation des contrôles de connexion
- Pratiques de base relatives à la sécurité des applications Web
- Sécurisation de l’appartenance