【问题标题】:Sendgrid does not send confirmation email asp.net core 3.1Sendgrid 不发送确认电子邮件 asp.net core 3.1
【发布时间】:2023-04-04 06:11:01
【问题描述】:

我正在使用此tutorial 发送帐户确认电子邮件,但我没有收到任何电子邮件或任何错误代码:

AuthMessageSenderOptions.cs

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

appSettings.json

"AuthMessageSenderOptions": {
    "SendGridUser": "MyUserName",
    "SendGridKey": "SG.Xa................ MyKey"
},

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("info@reloadrs.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);

        return client.SendEmailAsync(msg);
    }
}

Register.cs

var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
    _logger.LogInformation("User created a new account with password.");
    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
    var confirmationLink = Url.Page(nameof(ConfirmEmail), "Account",
        new { code, email = user.Email }, Request.Scheme);
    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
        $"Please confirm your account by" +
        $" <a href='{HtmlEncoder.Default.Encode(confirmationLink)}'>clicking here</a>.");
}

我也试过了,不仅在本地发布,而且还是一样

【问题讨论】:

  • 在您的最后一段代码中,您正在执行await _emailSender.SendEmailAsync(),但您没有捕获响应。如果将该结果分配给类似于sendgrid.com/docs/for-developers/sending-email/… 示例的变量,然后调试和检查它会发生什么?

标签: c# asp.net-core sendgrid


【解决方案1】:

你可以得到发送邮件的结果和错误信息:

var response = await client.SendEmailAsync(msg);
if (response.StatusCode != HttpStatusCode.OK
    && response.StatusCode != HttpStatusCode.Accepted)
{
    var errorMessage = response.Body.ReadAsStringAsync().Result;
    throw new Exception($"Failed to send mail to {to}, status code {response.StatusCode}, {errorMessage}");
}

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2021-11-19
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多