使用MailKit通过Outlook.com发送

时间:2019-02-09 20:04:50

标签: asp.net-core mailkit outlook.com

我正在尝试使用MailKit通过Outlook.com电子邮件地址发送电子邮件。

我遵循了我在网上看到的所有示例,这就是我所拥有的:

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

如果在useSSL上将true参数设置为client.Connect(),则会出现此错误:

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

如果将useSSL参数设置为false,则会出现此错误:

AuthenticationException: AuthenticationInvalidCredentials: 5.7.3 Authentication unsuccessful

我在做什么错了?

更新

根据@jstedfast的建议添加了ProtocolLogger,结果如下:

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]

顺便说一句,我用*注释了一些内容。我不确定那是什么以及它是否敏感。

5 个答案:

答案 0 :(得分:1)

以这种方式尝试:

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;

您也可以尝试client.ConnectType = SmtpConnectType.ConnectSSLAuto;


对于MailKit

client.Connect("smtp-mail.outlook.com", 587, SecureSocketOptions.StartTls);
client.Authenticate("me@outlook.com", "mypassword");

答案 1 :(得分:0)

information.house.city.findMe information.findMeToo 错误表示服务器拒绝您的用户名和/或密码。

也许用户名应该是AuthenticationException而不是me

尝试获取协议日志并查看正在使用哪种类型的身份验证机制。

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

答案 2 :(得分:0)

似乎代码本身可以工作。但是,请注意,如果您将帐户设置为要求2FA,则会收到上面的错误消息,表明您的凭据无效。确保禁用2FA!

答案 3 :(得分:0)

我自己一直在为这个问题而苦苦挣扎,想要一个新的交易所在线帐户(没有2FA)。该帐户用于客户,因此我没有在电子邮件客户端中配置该帐户。经过多次尝试,我将该帐户添加到了Outlook客户端并发送了一封测试电子邮件。之后,问题解决了。希望这可以帮助其他人解决问题。

答案 4 :(得分:0)

如果您面临的问题是由于 2FA(2 因素身份验证),您应该转到您的 Microsoft 设置,在高级设置中,您可以在收到“应用密码”后请求它,您应该使用它而不是你的电子邮件密码,对我有用。