MVC 5 Identity 2.0 Ошибка подтверждения регистрации по электронной почте

Может ли кто-нибудь посмотреть на следующий код и понять, что отвечает за возникновение ошибки «Произошла ошибка при обработке вашего запроса»? Я использую ASP.NET Identity 2.0, см. код ниже:

Идентитиконфиг

public class EmailService : IIdentityMessageService
{
    public Task SendAsync(IdentityMessage message)
    {
        // Plug in your email service here to send an email.
        var credentialUserName = "[email protected]";
        var sentFrom = "[email protected]";
        var pwd = "ourpassword";

        // Configure the client:
        System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("mail.ourdoamin.com");

        client.Port = 25;
        client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;

        // Creatte the credentials:
        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(credentialUserName, pwd);
        client.EnableSsl = false;
        client.Credentials = credentials;

        // Create the message:
        var mail = new System.Net.Mail.MailMessage(sentFrom, message.Destination);
        mail.Subject = message.Subject;
        mail.Body = message.Body;

        return Task.FromResult(0);
    }
}

По понятным причинам я не использовал правильные учетные данные в приведенном выше коде из соображений безопасности, но у меня есть контактная форма в том же проекте, которая использует правильные учетные данные, и электронная почта работает отлично.

Если я закомментирую приведенный выше код, за исключением public class EmailService : IIdentityMessageService { public Task SendAsync(IdentityMessage message) { return Task.FromResult(0); } }, процесс регистрации завершится успешно.

Любая помощь приветствуется :-)


person iggyweb    schedule 12.05.2014    source источник


Ответы (2)


Проблема была со строкой return Task.FromResult(0); вместо нее должно быть return client.SendMailAsync(mail);, теперь все работает :-)

person iggyweb    schedule 12.05.2014

использование await более правильно на мой взгляд (по крайней мере с версиями identity >= 2.0

public class EmailService : IIdentityMessageService
{
    public async Task SendAsync(IdentityMessage message)
    {
        await configSMTPasync(message);
    }

    // send email via smtp service
    private async Task configSMTPasync(IdentityMessage message)
    {
        // Plug in your email service here to send an email.
        var credentialUserName = "[email protected]";
        var sentFrom = "[email protected]";
        var pwd = "ourpassword";

        // Configure the client:
        System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("mail.ourdomain.com");

        client.Port = 25;
        client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;

        // Creatte the credentials:
        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(credentialUserName, pwd);
        client.EnableSsl = false;
        client.Credentials = credentials;

        // Create the message:
        var mail = new System.Net.Mail.MailMessage(sentFrom, message.Destination);
        mail.Subject = message.Subject;
        mail.Body = message.Body;

        await client.SendMailAsync(mail);
    }
}
person Stefan Wuthrich - Altafino    schedule 16.08.2014