4
votes

Utilisation de MailKit pour envoyer via Outlook.com

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.


0 commentaires

4 Réponses :


1
votes

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;


4 commentaires

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 );



0
votes

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


5 commentaires

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!



1
votes

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!


0 commentaires

0
votes

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.


0 commentaires