Estamos pensando em mudar para o O365; no entanto, desenvolvemos software que usa nosso servidor Exchange atual para enviar email a usuários externos e também a uma caixa de suporte quando ocorrerem erros.
Eu tenho testado isso para garantir que o código que temos no local continuará funcionando com o O365, mas até agora não obtive muito sucesso.
Eu tentei usar o SmtpClient do .Net e o SmtpClient do MailKit e nenhum deles parece funcionar. Eu continuo recebendo erro (este é o erro do MailKit - o erro .Net é semelhante)
"AuthenticationInvalidCredentials: 5.7.3 Autenticação malsucedida [* .prod.exchangelabs.com]"
Posso usar as credenciais que tenho no meu código para fazer logon no OWA - para que eu saiba que as credenciais são válidas. Não é possível enviar email via O356? Existe alguma configuração especial que precise acontecer no Exchange para tornar isso possível?
Aqui está o que eu tentei até agora:
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);
}
O código .Net SmtpClient parecia muito semelhante ao código MailKit.
- Existe uma maneira de enviar através do O365 com um usuário licenciado? (código acima)
- Existem configurações especiais necessárias no Exchange ou no usuário licenciado para fazer isso funcionar? (Se a resposta a 1 for sim)
- É possível enviar email por meio de uma caixa de correio compartilhada para a qual o usuário credenciado possui direitos Enviar como?
Atualizar
Ainda estou recebendo a mesma mensagem de erro. Temos o MFA ativado para nossos usuários do domínio. No entanto, temos uma política que não exige MFA para usuários quando eles estão entrando em um local confiável (o IP da nossa organização). Também listei nosso IP como um IP confiável. Na minha opinião, o MFA não deve ser o problema aqui.
Eu sei que as credenciais estão corretas. Copiei-os do código e colei-os na tela de login ao entrar no M365 - e entrei muito bem.
O que estou fazendo errado?
Para quem está tendo problemas semelhantes, descobri que meu problema era uma política de acesso condicional. A Microsoft fornece uma
Baseline Policy: Block Legacy Authentication
- que foi ativado em nosso AAD.Ao examinar a Política, ele foi projetado para bloquear qualquer mecanismo de autenticação que não exija MFA. Isso inclui coisas como POP e SMTP. Depois de desabilitar esta política, o código listado acima funcionou perfeitamente.
fonte