J'essaie d'envoyer un e-mail via mon adresse e-mail Outlook.com à l'aide de MailKit.
J'ai suivi tous les exemples que j'ai vus en ligne et voici ce que j'ai:
Connected to smtp://smtp-mail.outlook.com:587/?starttls=when-available S: 220 BN6PR11CA0009.outlook.office365.com Microsoft ESMTP MAIL Service ready at Sun, 10 Feb 2019 03:26:30 +0000 C: EHLO [192.168.1.12] S: 250-BN6PR11CA0009.outlook.office365.com Hello [73.175.143.94] S: 250-SIZE 157286400 S: 250-PIPELINING S: 250-DSN S: 250-ENHANCEDSTATUSCODES S: 250-STARTTLS S: 250-8BITMIME S: 250-BINARYMIME S: 250-CHUNKING S: 250 SMTPUTF8 C: STARTTLS S: 220 2.0.0 SMTP server ready C: EHLO [192.168.1.12] S: 250-BN6PR11CA0009.outlook.office365.com Hello [73.175.143.94] S: 250-SIZE 157286400 S: 250-PIPELINING S: 250-DSN S: 250-ENHANCEDSTATUSCODES S: 250-AUTH LOGIN XOAUTH2 S: 250-8BITMIME S: 250-BINARYMIME S: 250-CHUNKING S: 250 SMTPUTF8 C: AUTH LOGIN S: 334 ************ C: **************** S: 334 ************ C: **************** S: 535 5.7.3 Authentication unsuccessful [BN6PR11CA0009.namprd11.prod.outlook.com]
Si je règle le paramètre useSSL
sur true
sur client.Connect ()
, j'obtiens cette erreur:
AuthenticationException: AuthenticationInvalidCredentials: 5.7.3 Authentication unsuccessful
Si je règle le paramètre useSSL
sur false
, j'obtiens cette erreur:
An error occurred while attempting to establish an SSL or TLS connection
Qu'est-ce que je fais de mal?
Mise à jour
Ajout de ProtocolLogger
selon la suggestion de @jstedfast et voici le résultat:
public async Task SendEmailAsync(string email, string subject, string htmlmessage) { var message = new MimeMessage(); message.From.Add(new MailboxAddress("Service Account", "me@outlook.com")); message.To.Add(new MailboxAddress("First Last", email)); message.Subject = subject; message.Body = new TextPart(TextFormat.Html) { Text = htmlMessage }; using (var client = new SmtpClient()) { //Have tried both false and true client.Connect("smtp-mail.outlook.com", 587, false); client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Authenticate("me@outlook.com", "mypassword"); await client.SendAsync(message); client.Disconnect(true); } return; }
BTW, j'ai commenté des trucs avec *
. Je n'étais pas sûr de ce que c'était et si c'était sensible ou non.
4 Réponses :
essayez de cette manière:
client.Connect("smtp-mail.outlook.com", 587, SecureSocketOptions.StartTls); client.Authenticate("me@outlook.com", "mypassword");
Vous pouvez également essayer client.ConnectType = SmtpConnectType.ConnectSSLAuto;
Pour MailKit
client.Connect("smtp-mail.outlook.com", 587); client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential(From, Password); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true;
Utilisez-vous MailKit ou utilisez-vous MS SmtpClient? Je ne vois aucun UseDefaultCredentials
sur le client MailKit.
Oui, c'est par défaut. Je vérifierai la configuration équivalente pour mailkit. Je vais ley tu sais
J'ai essayé votre exemple MailKit et j'ai obtenu cette AuthenticationException: AuthenticationInvalidCredentials: 5.7.3 Authentification infructueuse [BN6PR06CA0060.namprd06.prod.outlook.com]
J'ai littéralement coupé et passé mes informations d'identification de mon code dans la connexion Outlook.com pour vérifier que mes informations d'identification sont correctes.
vous utilisez le port 578, ce qui signifie TLS et non SSL (487). vous devez utiliser emailClient.Connect ("smtp-mail.outlook.com", 587, MailKit.Security.SecureSocketOptions.StartTls
);
L'erreur AuthenticationException
signifie que le serveur rejette votre nom d'utilisateur et / ou votre mot de passe.
Peut-être que le nom d'utilisateur devrait être me
au lieu de me@outlook.com
?
Essayez d'obtenir un journal de protocole et voyez quel type de mécanisme d'authentification est utilisé.
https://github.com/jstedfast/MailKit/blob /master/FAQ.md#ProtocolLog
Voir ma mise à jour avec les résultats de ProtocolLogger
. Je ne suis pas une sorte d'expert avec SMTP, donc ce journal ne signifie pas grand-chose pour moi.
Les 2 chaînes que vous *
sortent (ce qui est bien, car ce sont des informations sensibles) sont les chaînes de nom d'utilisateur et de mot de passe encodées en base64. En supposant que ces chaînes sont correctes, cela signifie que le serveur ne permet pas à votre compte de s'authentifier. Certains serveurs de messagerie Web exigent que vous vous connectiez d'abord via le Web à partir de la même adresse IP. Cela pourrait-il être le problème? Si ce n'est pas le cas, vous devez peut-être activer SMTP pour votre compte dans les paramètres de votre compte (GMail l'exige, par exemple).
Bon appel! Donc, oui, ils avaient des paramètres pour Laisser les appareils et les applications utiliser POP
- que je devais activer. Ils ont également montré les paramètres SMTP Nom du serveur: smtp.office365.com, Port: 587, Méthode de cryptage: STARTTLS
. J'ai mis à jour mes paramètres pour refléter la modification du nom du serveur, mais je ne sais pas quoi faire de la méthode de cryptage. Sur la base de la sortie ci-dessus, il semblerait que quelque chose se soit produit concernant STARTTLS.
Vous pouvez utiliser client.Connect (hôte, port, SecureSocketOptions.StartTls);
pour appliquer STARTTLS. Par défaut, passer false
équivaut à SecureSocketOptions.StartTlsWhenAvailable
qui, comme son nom l'indique, passe à STARTTLS chaque fois que le serveur le prend en charge.
Alors je pense que je l'ai compris. J'ai activé 2FA sur mon compte Outlook. Je l'ai également activé sur Gmail et j'ai eu la même erreur de compte invalide. J'ai désactivé 2FA sur Gmail et envoyé un e-mail sans problème. Je suppose que c'est la même chose avec Outlook. Merci pour votre aide!
Il semble que le code lui-même fonctionne. Cependant, sachez que si vous avez configuré votre compte pour exiger 2FA, vous obtiendrez le message d'erreur ci-dessus qui indique que vos informations d'identification ne sont pas valides. Assurez-vous de désactiver 2FA!
J'ai moi-même été aux prises avec ce problème pour un nouveau compte d'échange en ligne (sans 2FA). Le compte était pour un client et je n'ai donc pas configuré le compte dans mon client de messagerie. Après de nombreuses tentatives, j'ai ajouté le compte à mon client Outlook et envoyé un e-mail de test. Après cela, le problème a été résolu. J'espère que cela aidera les autres à résoudre le problème.