2

我正在尝试修复 ASP.NET 2.0 中 CreateUserWizard 控件的行为。通过相当幼稚的开箱即用实现,如果您输入的电子邮件地址不存在,或者发送电子邮件时出现其他错误,您会得到一个YSOD,显示 SMTP 错误的丑陋细节,以及无论如何都会创建用户帐户。处理 SendMailError 似乎没有帮助,因为它是在用户创建后触发的。

理想情况下,电子邮件错误会导致显示“无效的电子邮件地址”错误消息(或类似的内容)。看起来这应该很容易,但经过相当多的环顾后,我还没有找到答案。有人有任何解决方案吗?

4

2 回答 2

2

这就是我所做的。这并不完美,但它有帮助。

protected void CreateUserWizard1_SendMailError(object sender, SendMailErrorEventArgs e)
{
    // e.Exception can be one of the exceptions generated from SmtpClient.Send(MailMessage)
    if (e.Exception is SmtpFailedRecipientException)
    {
        // The message could not be delivered to one or more of the recipients in To, CC, or BCC()()().
        // TODO: Set an error message on the page
        e.Handled = true;

        // Since the user has already been created at this point, we need to remove them.
        Membership.DeleteUser(CreateUserWizard1.UserName);

        // Set an internal flag for use in the ActiveStepChanged event.
        emailFailed = true;

        return;
    }
}

protected void CreateUserWizard1_ActiveStepChanged(object sender, EventArgs e)
{
    if (CreateUserWizard1.ActiveStep != CreateUserWizard1.CompleteStep)
        return;

    if (emailFailed)
    {
        // If the email failed, keep the user on the first step.
        CreateUserWizard1.ActiveStepIndex = 0;
        return;
    }
}
于 2010-11-17T16:26:05.093 回答
0

你不能那样做;您需要使用大多数企业所做的:发送一封确认电子邮件,他们必须在 X 小时内点击,然后才创建帐户。这与 CUW 的工作方式略有不同,因此您必须在一定程度上脱离基本功能并利用事件来阻止默认功能。

HTH。

于 2010-03-02T22:28:22.420 回答