Myślimy o przejściu na O365; opracowaliśmy jednak oprogramowanie, które wykorzystuje nasz obecny serwer Exchange do wysyłania wiadomości e-mail zarówno do użytkowników zewnętrznych, jak i do skrzynki wsparcia w przypadku wystąpienia błędów.
Testowałem to, aby upewnić się, że kod, który mamy na miejscu, będzie nadal działać z O365, ale jak dotąd nie odniosłem sukcesu.
Próbowałem używać SmtpClient .Net, a także SmtpClient MailKit i żaden z nich nie działa. Ciągle pojawia się błąd (jest to błąd MailKit - błąd .Net jest podobny)
„AuthenticationInvalidCredentials: 5.7.3 Niepowodzenie uwierzytelnienia [* .prod.exchangelabs.com]”
Mogę użyć poświadczeń, które mam w kodzie, aby zalogować się do OWA - więc wiem, że poświadczenia są prawidłowe. Czy nie można wysłać wiadomości e-mail przez O356? Czy jest możliwa jakaś specjalna konfiguracja w Exchange, aby było to możliwe?
Oto, co próbowałem do tej pory:
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);
}
Kod SmtpClient .Net wyglądał bardzo podobnie do kodu MailKit.
- Czy istnieje sposób wysyłania za pośrednictwem O365 z licencjonowanym użytkownikiem? (kod powyżej)
- Czy są wymagane jakieś specjalne ustawienia w Exchange lub dla licencjonowanego użytkownika, aby to zadziałało? (Jeśli odpowiedź na 1 brzmi „tak”)
- Czy możliwe jest wysyłanie wiadomości e-mail za pośrednictwem udostępnionej skrzynki pocztowej, do której użytkownik uwierzytelniony ma prawa Wyślij jako?
Aktualizacja
Nadal pojawia się ten sam komunikat o błędzie. Mamy włączone MFA dla użytkowników naszej domeny. Mamy jednak zasady, które nie wymagają MFA dla użytkowników, którzy logują się z zaufanej lokalizacji (adres IP naszej organizacji). Podałem również nasze IP jako Zaufane IP. Moim zdaniem MSZ nie powinno być tutaj problemem.
Wiem, że poświadczenia są poprawne. Skopiowałem je z kodu i wkleiłem na ekranie logowania podczas logowania do M365 - i wszystko było w porządku.
Co ja robię źle?
Dla każdego, kto ma podobne problemy, odkryłem, że moim problemem była polityka dostępu warunkowego. Microsoft zapewnia
Baseline Policy: Block Legacy Authentication
- który został włączony w naszym AAD.Patrząc na Politykę, blokuje ona wszelkie mechanizmy uwierzytelniania, które nie wymagają MFA. Dotyczy to między innymi POP i SMTP. Po wyłączeniu tej zasady powyższy kod działał dobrze.
źródło