You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#安全访问自有Gmail账号发送邮件(替代低安全应用权限)

老兄,我太懂你这情况了——谷歌早就逐步淘汰「低安全应用访问权限」了,现在那玩意儿基本没法用了。不过别慌,有两个靠谱的安全方案适配C#发送Gmail,完全满足你只发邮件的需求,给你掰扯清楚:

方案一:应用专用密码(适合个人账号,操作最简单)

这个方案只适合已经开启两步验证的Gmail账号,优点是几乎不用改原来的代码,换个密码就行:

  • 先确认你的Gmail账号开了两步验证,没开的话先去谷歌账号安全设置里开启
  • 登录谷歌账号的「安全」页面,找到「应用专用密码」选项(只有开了两步验证才会显示)
  • 新建一个应用专用密码,选「邮件」作为应用类型,设备随便选个「其他」,生成后会得到一串16位的密码
  • 把你原来C#代码里的密码替换成这串16位密码,其他配置完全不变,因为你已经用了SSL,代码示例如下:
var smtpClient = new SmtpClient("smtp.gmail.com", 587) 
{
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential("mygmailaccount@gmail.com", "这里填生成的16位应用专用密码"),
    DeliveryMethod = SmtpDeliveryMethod.Network,
    EnableSsl = true
};

这个方案的安全性比低安全应用高一大截,而且操作成本极低,适合个人日常使用。

方案二:OAuth 2.0(适合开发者/长期稳定场景)

如果你是开发者,或者想长期稳定使用(毕竟谷歌以后可能还会调整政策),推荐用OAuth 2.0配合MailKit(.NET官方推荐替代SmtpClient的邮件库),步骤如下:

  1. 先去谷歌云平台创建一个项目,启用「Gmail API」
  2. 创建OAuth 2.0客户端ID,选择「桌面应用」类型,拿到客户端ID和客户端密钥
  3. 安装NuGet包:Install-Package MailKit 和 Install-Package MimeKit(如果用.NET Core/.NET 5+,用dotnet add package命令也行)
  4. 编写发送邮件的代码,示例如下:
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using Google.Apis.Auth.OAuth2;
using System.Threading.Tasks;

public async Task SendGmailWithOAuth()
{
    // 构造邮件内容
    var email = new MimeMessage();
    email.From.Add(new MailboxAddress("你的名字", "mygmailaccount@gmail.com"));
    email.To.Add(new MailboxAddress("收件人名字", "recipient@example.com"));
    email.Subject = "测试邮件(OAuth 2.0)";
    email.Body = new TextPart("plain") { Text = "这是用OAuth 2.0+MailKit发送的测试邮件" };

    // 获取OAuth 2.0令牌
    var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        new ClientSecrets
        {
            ClientId = "你的客户端ID",
            ClientSecret = "你的客户端密钥"
        },
        new[] { "https://mail.google.com/" }, // 申请Gmail的全权限,只发邮件也需要这个 scope
        "user",
        System.Threading.CancellationToken.None
    ).Result;

    // 发送邮件
    using (var smtpClient = new SmtpClient())
    {
        await smtpClient.ConnectAsync("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
        await smtpClient.AuthenticateAsync(credential.Token);
        await smtpClient.SendAsync(email);
        await smtpClient.DisconnectAsync(true);
    }
}

第一次运行的时候会弹出谷歌的授权页面,授权后令牌会自动保存,后续运行就不用再授权了。而且MailKit比旧的SmtpClient功能更全,也更稳定,.NET 5+里SmtpClient已经被标记为过时了,迁移过来更靠谱。

额外注意点

  • 如果你用的是.NET Framework旧版本,SmtpClient还能凑合用,但还是建议尽早迁移到MailKit
  • 应用专用密码必须要开启两步验证才能用,没开的话要么开两步验证,要么直接用OAuth 2.0
  • 谷歌对Gmail的发送量有上限,个人账号每天大概500封,G Suite/Workspace账号上限更高,别超量就行

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:03:58