O365への移行を検討しています。ただし、現在のExchangeサーバーを使用して、エラーが発生したときに外部ユーザーとサポートボックスの両方に電子メールを送信するソフトウェアを開発しました。
私はこれをテストして、配置したコードがO365で引き続き機能することを確認していますが、これまでのところ、あまり成功していません。
.NetのSmtpClientとMailKitのSmtpClientを使用してみましたが、どちらも機能しないようです。エラーが発生し続けます(これはMailKitからのエラーです。Netエラーも同様です)。
「AuthenticationInvalidCredentials:5.7.3認証失敗[* .prod.exchangelabs.com]」
コードにある資格情報を使用してOWAにログインできます。資格情報が有効であることはわかっています。 O356経由でメールを送ることはできませんか?これを可能にするためにExchangeで実行する必要がある特別な構成はありますか?
これが私がこれまでに試したことです:
MailKit
var msg = new MimeMessage();
msg.From.Add(new MailboxAddress("Support","[email protected]"));
msg.To.Add(new MailboxAddress("Me","[email protected]"));
msg.To.Add(new MailboxAddress("External User","[email protected]"));
msg.Subject = "Test";
msg.Body = new TextPart("plain"){
Text = "Here is a message for you"
};
using(var client = new SmtpClient()){
client.ServerCertificateValidationCallback = (s,c,h,e) => true;
client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure what this does. Have tried with and without
client.Connect("smtp.office365.com", 587, MailKit.Security.SecureSocketOptions.StartTls);
client.Authenticate(new NetworkCredential("[email protected]", "supportPwd"));
client.Send(msg);
client.Disconnect(true);
}
.Net SmtpClientコードは、MailKitコードと非常によく似ていました。
更新
まだ同じエラーメッセージが表示されます。ドメインユーザーに対してMFAが有効になっています。ただし、ユーザーが信頼できる場所(組織のIP)からサインインする場合、ユーザーにMFAを必要としないポリシーがあります。また、信頼できるIPとしてIPをリストしました。私の考えでは、MFAはここでは問題になりません。
資格情報が正しいことを知っています。私はそれらをコードからコピーし、M365にサインインするときにログイン画面に貼り付けました-そして私はうまくいきました。
何が悪いのですか?
同様の問題を抱えている人にとって、私の問題は条件付きアクセスポリシーであることがわかりました。 MicrosoftはBaseline Policy: Block Legacy Authentication
-AADでオンになっています。
ポリシーを見ると、MFAを必要としない認証メカニズムをブロックするように設計されています。これには、POPやSMTPなどが含まれます。このポリシーを無効にすると、上記のコードは問題なく動作しました。