CreateUserWizard - 如果无法发送确认电子邮件,则阻止用户创建

时间:2010-03-02 20:57:29

标签: asp.net asp.net-membership asp.net-2.0 createuserwizard

我正在尝试修复ASP.NET 2.0中的CreateUserWizard控件的行为。使用相当天真的开箱即用的实现,如果您输入的电子邮件地址不存在,或者发送电子邮件时出现其他错误,您会看到YSOD显示SMTP的丑陋细节错误,无论如何都会创建用户帐户。处理SendMailError似乎没有帮助,因为在用户已经创建之后被解雇了。

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

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

你不能这样;您需要使用大多数企业所做的事情:发送一封确认电子邮件,他们必须在X小时内点击,然后才能创建帐户。这是对CUW工作方式的适度改变,因此您必须稍微脱离基本功能并利用事件来防止其默认功能。

HTH。