SendGrid Email - RegisterConfirmation - письмо не получено - PullRequest
0 голосов
/ 11 июля 2020

У меня проблема с подтверждением регистрации. Я работаю с ASP. NET CORE 3.1, и я создаю свое приложение с помощью руководств из MS Tutorial Identity

Я хочу, чтобы после регистрации новый пользователь получил электронное письмо для подтверждения регистрации . Ниже мой код:

EMailSender.cs

    public class EmailSender : IEmailSender
{
    public EmailSender(IOptions<AuthMessageSenderOptions> optionsAccessor)
    {
        Options = optionsAccessor.Value;
    }

    public AuthMessageSenderOptions Options { get; } //set only via Secret Manager

    public Task SendEmailAsync(string email, string subject, string message)
    {
        return Execute(Options.SendGridKey, subject, message, email);
    }

    public Task Execute(string apiKey, string subject, string message, string email)
    {
        var client = new SendGridClient(apiKey);
        var msg = new SendGridMessage()
        {
            From = new EmailAddress("kris202kris@gmail.com", Options.SendGridUser),
            Subject = subject,
            PlainTextContent = message,
            HtmlContent = message
        };
        msg.AddTo(new EmailAddress(email));

        // Disable click tracking.
        // See https://sendgrid.com/docs/User_Guide/Settings/tracking.html
        msg.SetClickTracking(false, false);

        var response = client.SendEmailAsync(msg);
        
        //return client.SendEmailAsync(msg);
        return response;
    }
}

AuthMessageSenderOptions.cs

    public class AuthMessageSenderOptions
{
    public string SendGridUser { get; set; }
    public string SendGridKey { get; set; }
}

Startup.cs (часть)

            // Email sending settings
        services.AddTransient<IEmailSender, EmailSender>();
        services.Configure<AuthMessageSenderOptions>(_config);

RegisterConfirmation.cs html .cs

    [AllowAnonymous]
public class RegisterConfirmationModel : PageModel
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly IEmailSender _sender;

    public RegisterConfirmationModel(UserManager<ApplicationUser> userManager, IEmailSender sender)
    {
        _userManager = userManager;
        _sender = sender;
    }

    public string Email { get; set; }

    public bool DisplayConfirmAccountLink { get; set; }

    public string EmailConfirmationUrl { get; set; }

    public async Task<IActionResult> OnGetAsync(string email, string returnUrl = null)
    {
        if (email == null)
        {
            return RedirectToPage("/Index");
        }

        var user = await _userManager.FindByEmailAsync(email);
        if (user == null)
        {
            return NotFound($"Unable to load user with email '{email}'.");
        }

        Email = email;

        await _sender.SendEmailAsync(email, "Register Confirmation", "Html message");

        return Page();
    }
}

У меня тоже есть секреты. json:

{"SendGridUser" : "MyUserName", "SendGridKey" : "SG.5r.......WuU" }

У вас есть идеи, друзья?

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Sendgrid не позволяет использовать GMAIL или YAHOO в качестве отправителя. См. Ответ на вашу проблему ЗДЕСЬ . В вашем коде вы используете "kris202kris@gmail.com". Полагаю, это ваша проблема.

0 голосов
/ 12 июля 2020

Измените Task Функции на Async Task. (Execute и SendEmailAsyn c)

Затем вызовите все функции Asyn c Task с return await Execute(...) и return await client.SendEmailAsync(msg)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...