C# 为什么Office 365的SMTP身份验证会在一个域失败,而在另一个域不会失败?

C# 为什么Office 365的SMTP身份验证会在一个域失败,而在另一个域不会失败?,c#,smtp,mailkit,smtp-auth,C#,Smtp,Mailkit,Smtp Auth,我有一些简单的C#代码(在.NET 4.8上)使用MailKit通过Office 365发送邮件: var messageToSend = new MimeMessage { Sender = new MailboxAddress("Data Catalyst Site", "xxx@xxx.xx"), Subject = "New Data Catalyst Site Contact", Body = new

我有一些简单的C#代码(在.NET 4.8上)使用MailKit通过Office 365发送邮件:

var messageToSend = new MimeMessage
{
    Sender = new MailboxAddress("Data Catalyst Site", "xxx@xxx.xx"),
    Subject = "New Data Catalyst Site Contact",
    Body = new TextPart(TextFormat.Html) { Text = $"<html>{builder.ToString()}</html>" }
};

messageToSend.To.Add(new MailboxAddress("DataCatalyst", "yyy@xxx.xx"));

using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
    smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;

    await smtp.ConnectAsync("smtp.office365.com", 587, SecureSocketOptions.StartTls);
    await smtp.AuthenticateAsync("xxx@xxx.xx", "********");
    await smtp.SendAsync(messageToSend);
    await smtp.DisconnectAsync(true);

};
var messageToSend=new mimessage
{
发件人=新邮箱地址(“数据催化剂站点”)xxx@xxx.xx"),
主题=“新数据催化剂站点联系人”,
Body=newtextpart(TextFormat.Html){Text=$“{builder.ToString()}”}
};
messageToSend.To.Add(新邮箱地址(“DataCatalyst”),“yyy@xxx.xx"));
使用(var smtp=new MailKit.Net.smtp.SmtpClient())
{
smtp.ServerCertificateValidationCallback=(s,c,h,e)=>true;
等待smtp.ConnectAsync(“smtp.office365.com”,587,SecureSocketOptions.StartTls);
等待smtp.AuthenticateTasync(“xxx@xxx.xx", "********");
等待smtp.SendAsync(messageToSend);
等待smtp.DisconnectAsync(true);
};
我们有多个Office 365域。如果我使用一个域中的任何邮箱,这都可以正常工作。如果我使用来自其他邮箱的任何邮箱,它将失败:

SmtpCommandException:5.7.3身份验证未成功[LNXP265CA0036.GBRP265.PROD.OUTLOOK.COM]

我已经使用我们通常的出站邮件帐户、我自己的帐户以及为测试创建的新帐户/邮箱进行了测试。在每种情况下,我都非常了解密码,并已登录到office portal以验证这一点


由于故障跨越多个邮箱,这感觉像是office配置中的某个设置—但在哪里?或者我们还遗漏了什么?

绝对是!!!带有Outlook邮件服务器的公司网络将使用端口587将所有电子邮件转发到代理服务器。因此,发送到gmail的电子邮件将被阻止。代理服务器将使用公司密码服务器验证电子邮件,并拒绝用户名和密码。因此,您必须将默认凭据设置为true,而不是使用用户名/密码。请看:谢谢你的回答,但我不确定我是否理解它,或者它在这里是否完全相关。我们不想发送到gmail。我们不能使用用户名/密码,因为这在其他域中很好用。gmail只是一个例子。允许使用什么凭据取决于域设置。