Using MailKit to send through Outlook.com

15k Views Asked by At

I'm trying to send an email through my Outlook.com email address using MailKit.

I've followed all the examples I've seen online and this is what I have:

public async Task SendEmailAsync(string email, string subject, string htmlmessage)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("Service Account", "[email protected]"));
    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("[email protected]", "mypassword");
        await client.SendAsync(message);
        client.Disconnect(true);
    }

    return;
}

If I set the useSSL parameter to true on client.Connect(), I get this error:

An error occurred while attempting to establish an SSL or TLS connection

If I set the useSSL parameter to false, I get this error:

AuthenticationException: AuthenticationInvalidCredentials: 5.7.3 Authentication unsuccessful

What am I doing wrong?

Update

Added ProtocolLogger per the suggestion of @jstedfast and here was the result:

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]

BTW, I commented out some stuff with *. I wasn't sure what that was and if it was sensitive or not.

5

There are 5 best solutions below

1
RHarris On BEST ANSWER

It appears as though the code itself works. However, be aware that if you've set your account to require 2FA, you will get the error message above that indicates that your credentials are invalid. Be sure to disable 2FA!

4
Derviş Kayımbaşıoğlu On

try in this way:

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;

You can also try client.ConnectType = SmtpConnectType.ConnectSSLAuto;


For MailKit

client.Connect("smtp-mail.outlook.com", 587, SecureSocketOptions.StartTls);
client.Authenticate("[email protected]", "mypassword");
5
jstedfast On

The AuthenticationException error means that the server is rejecting your user name and/or password.

Perhaps the username should be me instead of [email protected]?

Try getting a protocol log and seeing what type of authentication mechanism is being used.

https://github.com/jstedfast/MailKit/blob/master/FAQ.md#ProtocolLog

0
wschroers On

I have been struggling with this issue myself for a new exchange online account (without 2FA). The account was for a customer and so I did not configure the account in my email client. After many attempts I added the account to my Outlook client and sent a test email. After that the issue was solved. Hope this will help others to solve the problem.

1
Johnny Am On

If the problem you're facing is because of 2FA (2-factor Authentication) you should go to your Microsoft settings, in advanced settings you could request an "app password" once you receive it, you should use it instead of your email's password, worked for me.