代码之家  ›  专栏  ›  技术社区  ›  Eric Pohl

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

  •  2
  • Eric Pohl  · 技术社区  · 14 年前

    我正在尝试修复asp.net 2.0中createuserwizard控件的行为。使用一个相当幼稚的开箱即用的实现,如果您输入了一个不存在的电子邮件地址,或者发送电子邮件时出现了其他错误,您将得到一个 YSOD 显示SMTP错误的丑陋详细信息,并且无论如何都会创建用户帐户。处理sendmailerror似乎没有帮助,因为它已被激发 之后 用户已创建。

    理想情况下,电子邮件错误会导致显示“无效电子邮件地址”错误消息(或类似的内容)。看起来这应该很容易,但经过一番周旋,我还没有找到答案。有人有什么办法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Greg    14 年前

    我就是这么做的。这不完美,但有帮助。

    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;
        }
    }
    
        2
  •  0
  •   Brian Mains    14 年前

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

    Hth.