停止在.NET PasswordRecovery控件中传播SendingMail事件

时间:2014-02-07 18:23:39

标签: c# asp.net .net events event-handling

我有一个PasswordRecovery控件,我需要修改它的行为。触发SendingMail事件时,将调用事件处理程序。在事件处理程序中,我已定义了将MailMessage写入队列的行为(稍后进行处理)。到现在为止还挺好。问题是事件继续并尝试使用内置方法LoginUtil.SendPasswordMail。这需要smtp服务器信息,我不想提供(因为它会违反我们的应用程序的设计)。

这是事件处理程序:

protected void vendorWebPasswordRecovery_SendingMail(object sender, MailMessageEventArgs e)
{
    string userName = this.vendorWebPasswordRecovery.UserName;

    try
    {
        MailMessage emailMessage = e.Message;

        var messageData = new Dictionary<string, string>();

        messageData.Add("toEmail", emailMessage.To[0].ToString());
        messageData.Add("subject", emailMessage.Subject + " from the queue!");
        messageData.Add("body", emailMessage.Body);

        //Write the message out to the queue
        SendPasswordResetEmail(messageData, userName);
    }
    catch (Exception ex)
    {
        LoggingHandler.Write("MailMessageEventArgs did not contain expected data: - " + ex.Message, LogCategoryType.Verbose, TraceEventType.Verbose, 1, ex);
    }                

    //Compilation error: "MailMessageEventArgs doesn't contain a definition for 'Handled'"
    e.Handled = true;
}

如何阻止事件继续并调用内置方法?我尝试将MailMessageEventArgs设置为已处理,但这是编译错误。这甚至是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

您应该使用e.Cancel取消活动并停止发送默认电子邮件。

此处示例:scottonwriting.net/sowblog/archive/2009/11/10/163371.aspx