Поделиться через


SendMailErrorEventArgs Класс

Определение

Предоставляет данные для события SendMailError в таких элементах управления, как ChangePassword, CreateUserWizard и PasswordRecovery.

public ref class SendMailErrorEventArgs : EventArgs
public class SendMailErrorEventArgs : EventArgs
type SendMailErrorEventArgs = class
    inherit EventArgs
Public Class SendMailErrorEventArgs
Inherits EventArgs
Наследование
SendMailErrorEventArgs

Примеры

В следующем примере кода показана страница ASP.NET, которая использует ChangePassword веб-элемент управления и включает обработчик событий с SendMailError именем SendMailError. В примере кода предполагается, что веб-сайт ASP.NET настроен для использования ASP.NET членства и проверки подлинности с помощью форм, а также что создан пользователь, имя и пароль которого вам известны. Дополнительные сведения см. в разделе Практическое руководство. Реализация простой проверки подлинности с помощью форм.

Если смена пароля выполнена успешно, код в обработчике SendingMail событий пытается отправить пользователю сообщение электронной почты для подтверждения изменения. Чтобы этот пример кода работал, необходимо уже настроить SMTP на сервере. Сведения о настройке SMTP-сервера см. в разделе Практическое руководство. Установка и настройка виртуальных серверов SMTP в IIS 6.0. Для целей этого примера не требуется настраивать SMTP-сервер; Пример создан для проверки на наличие ошибки при отправке сообщения электронной почты.

Если почтовый сервер настроен неправильно или возникает другая ошибка и сообщение электронной почты не может быть отправлено, SendMailError вызывается функция . Пользователю отобразится сообщение. Кроме того, событие регистрируется в журнале событий приложений Windows с предположением, что источник события с именем MySamplesSite уже существует. См. пример кода ниже, чтобы создать указанный источник события. Дополнительные сведения о создании источника событий см. в разделе Server Event Handling in ASP.NET Web Forms Pages. Свойство HandledSendMailErrorEventArgs объекта имеет значение , true чтобы указать, что ошибка была обработана.

<%@ 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>

Используйте следующий пример кода, если необходимо программно добавить источник событий с именем MySamplesSite в журнал приложений. Этот источник событий должен существовать, чтобы первый пример кода работал правильно. В следующем примере кода требуются права администратора.

#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

Комментарии

Объект SendMailErrorEventArgs содержит сообщение об ошибке, которое вызывается поставщиком почты SMTP, когда элемент управления или CreateUserWizard элемент управления не может отправить ChangePassword сообщение электронной почты. В этом случае SendMailErrorEventArgs объект отправляется в SendMailErrorEventHandler.

Создайте SendMailErrorEventHandler делегат для обработки события. Обработка события позволяет веб-приложению продолжать работать, даже если возникло исключение. Это полезно, если отправка сообщения электронной почты не является критически важной. Например, если исключение возникает при работе с многошаговым мастером, может быть полезно регистрировать ошибку, отображать информативное сообщение для пользователя и позволить пользователю завершить работу мастера.

Изучите свойство , Exception чтобы определить фактическую причину исключения. Наиболее распространенной причиной исключения является ошибка конфигурации в элементе< SMTP> (параметры сети) файла конфигурации компьютера. Хотя подобная ошибка обычно обнаруживается во время разработки и отладки приложения, почтовые серверы могут неожиданно завершиться сбоем в рабочей среде, и необходимо определить, будет ли в этой ситуации происходит сбой всего приложения. В противном случае обработка события позволяет приложению продолжить работу.

Необходимо присвоить свойству Handled значение , true чтобы сообщить, что исключение было обработано; в противном случае исключение будет повторно создано и будет включать исходный стек вызовов и сообщение об ошибке.

Если вы не создаете обработчик событий для SendMailError события или если вы создаете обработчик событий, но оставляете Handled для свойства значение false, веб-приложение перестанет работать, если при отправке сообщения электронной почты возникает ошибка, а ASP.NET отобразит сообщение об ошибке.

Метод OnSendMailError также позволяет производным классам обрабатывать событие, а не с помощью SendMailErrorEventHandler. Это предпочтительный метод обработки события в классе, производном от ChangePassword или CreateUserWizard.

Дополнительные сведения об обработке событий см. в разделе Обработка событий сервера на страницах веб-форм ASP.NET.

Примечания для тех, кто наследует этот метод

При переопределении OnSendMailError(SendMailErrorEventArgs) в производном классе обязательно вызовите OnSendMailError(SendMailErrorEventArgs) метод базового класса, чтобы разрешить зарегистрированным делегатам получать событие.

Конструкторы

SendMailErrorEventArgs(Exception)

Инициализирует новый экземпляр класса SendMailErrorEventArgs.

Свойства

Exception

Возвращает исключение, выбрасываемое почтовым SMTP-сервером при невозможности отправить сообщение электронной почты.

Handled

Указывает, было ли обработано исключение SMTP, содержащееся в свойстве Exception.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел