VB.NET发送邮件给OUTLOOK.COM的用户,用OUTLOOK.COM邮箱账号登录给别人发邮件

在VB.NET中通过代码发送邮件时,确实会遇到邮箱服务的身份认证(Authentication)要求。特别是微软Outlook/Hotmail等服务,已经逐步禁用传统的"基本身份验证"(Basic Authentication) ,转而强制要求使用更安全的 OAuth 2.0 认证

下面我将为你说明如何处理身份认证问题,并提供代码示例。

⚠️ 重要提醒:认证方式的变化

微软已多次宣布并推迟禁用基本身份验证的时间线。根据我目前看到的信息,最新的计划是:

  • 2026年3月1日开始逐步淘汰通过SMTP AUTH发送电子邮件的基本身份验证。

  • 2026年4月30日 预计将完全停用此方法9。

    尽管目前基本认证可能仍有效,但从长远和稳定的角度出发,强烈建议为新项目或重要应用直接采用OAuth 2.0认证

下面的表格汇总了不同邮箱类型推荐使用的认证方式和关键参数:

邮箱类型 推荐认证方式 SMTP 服务器 端口 (推荐) 加密方式 注意事项
Outlook/Hotmail OAuth 2.0 smtp.office365.com 587 STARTTLS 需在Azure AD注册应用并配置权限。未来必须使用OAuth19。
基本认证 (过渡) smtp.office365.com 587 STARTTLS 目前可能有效,但会被逐步淘汰。需在账户设置中启用SMTP认证并可能使用应用密码。
QQ邮箱 基本认证 (应用密码) smtp.qq.com 465 或 587 SSL 或 STARTTLS 需在邮箱设置中开启SMTP服务并获取授权码(即应用密码),不要在代码中直接使用你的QQ密码。
163邮箱 基本认证 (应用密码) smtp.163.com 465 或 994 SSL 需在邮箱设置中开启SMTP服务并获取授权码(即应用密码),不要在代码中直接使用你的邮箱密码。

下面是针对不同认证方式的代码示例。

🔐 方法一:使用 OAuth 2.0 认证 (Outlook/Hotmail 推荐)

这是微软推荐的、面向未来的方式,但设置相对复杂。

前期准备(在Azure Portal中配置):
  1. 注册应用程序 :访问 Azure Portal (https://portal.azure.com),在"Azure Active Directory"中注册一个新应用程序。

  2. 添加客户端密码 :在应用的"证书和密码"部分,创建一个新的客户端密码,并妥善保存其(稍后代码中会用到)。

  3. 配置API权限 :在应用的"API权限"中,添加 SMTP.Send 权限(属于 Office 365 Exchange Online ),并代表你的组织授予管理员同意

VB.NET 代码示例 (使用 MailKit 库)

.NET Framework 内置的 SmtpClient 对 OAuth 2.0 的支持不佳,推荐使用更现代且支持更好的 MailKit 库。你可以通过NuGet包管理器安装 MailKitMimeKit

vbnet 复制代码
Imports MailKit.Net.Smtp
Imports MailKit.Security
Imports MimeKit
Imports System.Threading

' 注意:此示例需要安装 MailKit 和 MimeKit NuGet 包。
Public Async Function SendEmailViaOAuthAsync() As Task
    Dim message As New MimeMessage()
    message.From.Add(New MailboxAddress("你的名字", "your_email@outlook.com")) ' 你的Outlook邮箱
    message.To.Add(New MailboxAddress("收件人名字", "recipient@example.com")) ' 收件人邮箱
    message.Subject = "这是一封测试邮件"
    message.Body = New TextPart("plain") With {
        .Text = "这是一封使用VB.NET和OAuth 2.0发送的测试邮件。"
    }

    Using client As New MailKit.Net.Smtp.SmtpClient()
        Try
            ' 连接到Outlook SMTP服务器
            Await client.ConnectAsync("smtp.office365.com", 587, SecureSocketOptions.StartTls)

            ' 请注意:这里的密码是你在Azure应用中创建的"客户端密码",不是你的邮箱密码!
            Dim oauth2 As New SaslMechanismOAuth2("your_email@outlook.com", "你的客户端密码")

            ' 进行OAuth 2.0认证
            Await client.AuthenticateAsync(oauth2)

            ' 发送邮件
            Await client.SendAsync(message)
            Console.WriteLine("邮件发送成功!")
        Catch ex As Exception
            Console.WriteLine("发送失败: " & ex.ToString())
        Finally
            Await client.DisconnectAsync(True)
        End Try
    End Using
End Function

🔓 方法二:使用基本认证 (传统方式,可能逐步淘汰)

对于QQ、163等邮箱,目前通常仍使用基本认证,但需使用应用专用密码(授权码)。对于Outlook/Hotmail,此方式未来会失效。

VB.NET 代码示例 (使用 System.Net.Mail.SmtpClient)
vbnet 复制代码
Imports System.Net.Mail
Imports System.Net

Public Sub SendEmailViaBasicAuth()
    Using smtpClient As New SmtpClient("smtp.office365.com") ' 对于Outlook。QQ邮箱用 "smtp.qq.com", 163邮箱用 "smtp.163.com"
        smtpClient.Port = 587 ' Outlook端口。QQ也可用587或465,163常用465或994
        smtpClient.Credentials = New NetworkCredential("your_email@outlook.com", "你的密码或授权码") ' 对于Outlook,如果开启了双因素认证,这里可能需要应用密码。对于QQ/163,此处填授权码。
        smtpClient.EnableSsl = True ' 启用加密连接。对于端口465,有时可能需要其他配置。

        Dim mailMessage As New MailMessage()
        mailMessage.From = New MailAddress("your_email@outlook.com")
        mailMessage.To.Add("recipient@example.com")
        mailMessage.Subject = "VB.NET 基本认证测试"
        mailMessage.Body = "这是一封使用基本认证发送的测试邮件。"

        Try
            smtpClient.Send(mailMessage)
            Console.WriteLine("邮件发送成功!")
        Catch ex As Exception
            Console.WriteLine("发送失败: " & ex.ToString())
        End Try
    End Using
End Sub

⚠️ 发送邮件时的其他注意事项

除了认证方式,以下几点也需要留意:

  • 端口与加密:不同的邮箱服务商可能支持不同的端口和加密方式(SSL/TLS)。如果默认端口不行,可以尝试其他常用端口。

  • 授权码/应用密码 :对于QQ、163等邮箱,为了安全,务必在邮箱设置中开启SMTP服务并获取专用的授权码,不要在代码中直接使用你的邮箱登录密码。

  • 服务器限制:免费邮箱通常对每日发信数量、频率有限制,大量发送需注意。

  • 垃圾邮件风险:注意邮件内容格式,避免被收件方服务器误判为垃圾邮件。对于大批量发件人,微软等提供商还要求配置SPF、DKIM、DMARC等记录以提高发信信誉和成功率7。

💎 总结与建议

在VB.NET中发送邮件,处理认证的关键是:

  1. 认清邮箱类型:确认你使用的是Outlook/Hotmail还是国内邮箱(QQ、163)。

  2. 选择认证方式

    • Outlook/Hotmail首选 OAuth 2.0(尽管设置稍复杂,但一劳永逸)。暂时可测试基本认证,但需知它终将失效。

    • QQ/163等国内邮箱 :使用基本认证 ,但密码处填写你在邮箱设置中获取的授权码

  3. 使用合适的库和参数 :对于OAuth 2.0,推荐使用 MailKit 库。对于基本认证,System.Net.Mail.SmtpClient 基本够用,但请注意微软也已建议使用 MailKit 等替代方案。

希望这些信息能帮助你顺利地在VB.NET中实现邮件发送功能。