CreateUserWizard - предотвращение создания пользователя, если электронное письмо с подтверждением не может быть отправлено - PullRequest
2 голосов
/ 02 марта 2010

Я пытаюсь исправить поведение элемента управления CreateUserWizard в ASP.NET 2.0. С довольно наивной, готовой к реализации реализацией, если вы вводите адрес электронной почты, который не существует, или возникает какая-то другая ошибка при отправке электронной почты, вы получаете YSOD , показывающий ужасные детали ошибка SMTP, плюс учетная запись пользователя создается в любом случае. Обработка SendMailError, похоже, не помогает, так как он запускается после , когда пользователь уже создан.

В идеале, ошибка электронной почты может привести к отображению сообщения об ошибке «неверный адрес электронной почты» (или что-то в этом роде). Кажется, это должно быть довольно легко, но после долгого осмотра я не нашел ответа. У кого-нибудь есть решения?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010

Это то, что я делаю. Это не идеально, но это помогает.

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;
    }
}
0 голосов
/ 03 марта 2010

Вы не можете таким образом; вам нужно будет использовать то, что делает большинство компаний: отправьте электронное письмо с подтверждением, на которое они должны нажать через X часов, и только после этого создайте учетную запись. Это скромное изменение по сравнению с тем, как работает CUW, поэтому вам придется немного оторваться от базовой функциональности и использовать события, чтобы предотвратить использование этой функции по умолчанию.

НТН.

...