带有 gmail smtp 的 Microsoft 身份验证电子邮件

Microsoft Identity Confirmation Email with gmail smtp

提问人:Tonto 提问时间:11/7/2023 最后编辑:ThomasArdalTonto 更新时间:11/10/2023 访问量:47

问:

这似乎让我感到困惑,我已经使用我们机构的电子邮件在旧版应用程序上设置了 Identity 2.0,该电子邮件位于 google suite(工作空间)上。 因此,我们决定将 gmail smtp 用于电子邮件,(启用安全性较低的应用程序)在 google 上作为我们需要发送的电子邮件地址。

我注意到 2 因素身份验证电子邮件已正确发送,但所有包含身份的电子邮件均未发送。Gmail 正在向发件人电子邮件发送一封电子邮件,指出该电子邮件被拒绝。callbackCode

我们改变了方法,删除了链接,只是决定将链接发送给用户,将其复制并粘贴到浏览器中。 现在,忘记密码可以正常工作,电子邮件确认电子邮件不会在生产环境中发送,并且电子邮件收件箱或发件箱中没有任何内容可以确定错误是什么。它每次在开发环境中都会发送电子邮件确认电子邮件。

认为可能与 gmail 的关系比与代码的关系更大,所以我没有在这里添加任何代码。 任何指示为什么会这样,以及我们如何开始调试以查看实际发生的情况。

private async Task<bool> SendEmailAsync(string email, string subject, string message, string name = null)
{
    var toName = string.IsNullOrEmpty(name) ? email : name;
    var messageBody = new MimeMessage();
    messageBody.From.Add(new MailboxAddress(_app, _emailSettings.EmailAddress));
    messageBody.To.Add(new MailboxAddress(toName, email));
    messageBody.Subject = subject;
    var messType = StringUtils.ContainsHTMLElements(message) ? "html" : "plain";
    messageBody.Body = new TextPart(messType)
    {
        Text = message
    };
    await SendAsync(messageBody);
    return true;
}

这是 sendAsync

private async Task SendAsync(MimeMessage messageBody)
{
    using (var client = new SmtpClient())
    {
        await client.ConnectAsync("[email protected]", 587, MailKit.Security.SecureSocketOptions.Auto);
                
        await client.AuthenticateAsync("[email protected]", "password");

        await client.SendAsync(messageBody);
        await client.DisconnectAsync(true);
    }
}
C# WebForms SMTP Gmail

评论

0赞 Linda Lawton - DaImTo 11/8/2023
我想你忘记了你问题的问题部分。问题到底是什么,我能看到你的代码吗?
0赞 Tonto 11/8/2023
未发送电子邮件确认,生产中没有错误。如何调试。发送所有其他电子邮件,包括忘记密码,其中也包含代码callbackUrl
0赞 Tonto 11/8/2023
代码已添加到问题中。不要相信代码有问题,因为它会发送除电子邮件确认邮件之外的所有其他电子邮件
0赞 Linda Lawton - DaImTo 11/8/2023
你可能不认为这是你的代码的问题,但你应该始终在你的问题中添加一个最小的可重现示例,以便我们可以看到你在做什么。

答:

0赞 Linda Lawton - DaImTo 11/8/2023 #1

这是我示例中的代码。我想您忘记了 smtp 服务器,并尝试使用并确保您发送的是而不是实际的 gmail 用户密码。NetworkCredentialAppsPassword

var smtpClient = new SmtpClient("smtp.gmail.com")
        {
            Port = 587,
            Credentials = new NetworkCredential(From , GoogleAppPassword),
            EnableSsl = true,
        };
var mailMessage = new MailMessage
        {
            From = new MailAddress(From),
            Subject = Subject,
            Body = Body,
            IsBodyHtml = true,
        };
mailMessage.To.Add(To);

smtpClient.Send(mailMessage);

具有工作区服务帐户的 Xoauth。

var userEmail = "[email protected]"

const string PathToServiceAccountKeyFile = @"C:\Development\FreeLance\GoogleSamples\Credentials\workspaceserviceaccount.json";

var credential = GoogleCredential.FromFile(PathToServiceAccountKeyFile)
    .CreateWithUser(userEmail)  // delegate to user on workspace.
    .CreateScoped(new[] {"https://mail.google.com/"});

var message = new EmailMessage()
{
    From = userEmail,
    To = to,
    MessageText = "This is a test message using https://developers.google.com/gmail/imap/xoauth2-protocol",
    Subject = "Testing GmailSMTP with XOauth2"
};

try
{
    using (var client = new SmtpClient())
    {
        client.Connect("smtp.gmail.com", 465, true);
        
        var oauth2 = new SaslMechanismOAuth2 (message.From, credential.Token.AccessToken);
        await client.AuthenticateAsync (oauth2, CancellationToken.None);
        
        client.Send(message.GetMessage());
        client.Disconnect(true);
    }

   
}
catch (Exception ex)
{
   Console.WriteLine(ex.Message);
}


public class EmailMessage
{
    public string To { get; set; }
    public string From { get; set; }
    public string Subject { get; set; }
    public string MessageText { get; set; }

    public MimeMessage GetMessage()
    {
        var body = MessageText;
        var message = new MimeMessage();
        message.From.Add(new MailboxAddress("From a user", From));
        message.To.Add(new MailboxAddress("To a user", To));
        message.Subject = Subject;
        message.Body = new TextPart("plain") { Text = body };
        return message;
    }
}

评论

0赞 Tonto 11/9/2023
感谢您的回复,不允许用于 Google Workspace 电子邮件。这就是我读到的,我也无法为有问题的电子邮件生成。如果还有什么我能做的,请告诉我。谢谢AppsPasswordAppPassword
0赞 Linda Lawton - DaImTo 11/9/2023
您是否考虑过服务帐户并改用 xoauth。在这种情况下,使用 Gmail API 可能会更容易
0赞 Tonto 11/9/2023
我正在尝试 xoauth,但对我来说不是很清楚。有什么我可以指出的,尤其是它的设置
0赞 Linda Lawton - DaImTo 11/10/2023
试试我的编辑,如果您有任何问题,请告诉我。