我正在尝试修复ASP.NET 2.0中的CreateUserWizard控件的行为。使用相当天真的开箱即用的实现,如果您输入的电子邮件地址不存在,或者发送电子邮件时出现其他错误,您会看到YSOD显示SMTP的丑陋细节错误,无论如何都会创建用户帐户。处理SendMailError似乎没有帮助,因为在用户已经创建之后被解雇了。
理想情况下,电子邮件错误会导致显示“无效的电子邮件地址”错误消息(或某种效果)。看起来这应该很容易,但经过相当多的环顾四周后,我还没有找到答案。有人有任何解决方案吗?
答案 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。