LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

C#.Net 程序开发采用开源组件 MailKit 通过 QQ 邮箱 SMTP 服务器发送带附件的外部 Email 邮件


2026年9月21日 1:9 本文热度 173

先在 Visual Studio 里装 MailKit,有两种方式,操作如下:

方式一:程序包管理器控制台(推荐)

  1. 在 Visual Studio 中打开你的项目

  2. 菜单栏:工具 → NuGet 包管理器 → 程序包管理器控制台

  3. 在弹出的控制台窗口,顶部有一个「默认项目」下拉框,选择你的项目(如 QQSmtpMailDemo)——这步容易漏,不选对会装错项目

  4. 在控制台输入命令,回车:

Install-Package MailKit -Version 2.15.0

 5. 等待进度条走完,看到「Successfully installed」即成功,MimeKit 会自动作为依赖一起装上

方式二:图形界面操作

  1. 在解决方案资源管理器中,右键点击你的项目 → 选择「管理 NuGet 程序包

  2. 左侧选「浏览」,右上搜索框输入 MailKit

  3. 选中 MailKit,右侧面板把「版本」下拉框选为 2.15.0(老版 UI 的版本下拉在右侧属性面板里)

  4. 点击「安装」,弹出许可协议点「我接受」

安装后检查

装完后确认项目引用里出现了两个项:

  • MailKit

  • MimeKit

然后把你项目里的代码替换成上一条给的 MailKit 版本,重新编译即可。

如果安装失败(搜索不到 / 超时)

  • 检查 NuGet 源:工具 → 选项 → NuGet 包管理器 → 程序包源,确认 nuget.org 已勾选

  • 国内网络访问 nuget.org​ 慢的话,可以添加腾讯云镜像源,控制台执行:

nuget sources Add -Name "Tencent" -Source "https://mirrors.cloud.tencent.com/nuget/"

然后再执行 Install-Package MailKit -Version 2.15.0

做完以上设置后,参考下面代码即可:

using System;

using MailKit.Net.Smtp;

using MailKit.Security;

using MimeKit;


namespace QQSmtpMailDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            string sendMailAccount = "你的QQ邮箱@qq.com"; // 发件邮箱

            string authCode = "QQ邮箱生成的授权码";       // 不是QQ登录密码!

            string receiveMail = "test@clicksun.cn";     // 收件邮箱


            try

            {

                using (var client = new SmtpClient())

                {

                    // 强制 TLS 1.2(若新版 MailKit 报 SslProtocols 不存在,删掉这行即可,新版默认 TLS 1.2+)

                    client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

                    client.Connect("smtp.qq.com", 587, SecureSocketOptions.StartTls);

                    client.Authenticate(sendMailAccount, authCode);


                    var message = new MimeMessage();

                    message.From.Add(new MailboxAddress("发件人名称", sendMailAccount));

                    message.To.Add(new MailboxAddress("收件人", receiveMail));

                    message.Subject = "测试邮件标题";

                    message.Body = new TextPart("plain") { Text = "这是一封来自C#程序的SMTP测试邮件" };


                    client.Send(message);

                    client.Disconnect(true);

                    Console.WriteLine("✅ 邮件发送成功!");

                }

            }

            catch (Exception ex)

            {

                Exception cur = ex;

                int i = 0;

                while (cur != null)

                {

                    i++;

                    Console.WriteLine($"[{i}] {cur.GetType().Name}: {cur.Message}");

                    cur = cur.InnerException;

                }

            }

            Console.ReadKey();

        }

    }

}

错误解决

如果执行发送邮件后提示错误:

[1] SmtpProtocolException: The SMTP server has unexpectedly disconnected.

那么应该是发信 Email 账号或授权码有误造成的,修正后再重试。

重新生成 QQ 邮箱 SMTP 授权码 + 网页版登录一次(最常见)

  1. 浏览器登录 mail.qq.com

  2. 设置 → 账户 → 确认「POP3/SMTP 服务」是开启状态(没开就开启并重新生成授权码)

  3. 点「生成授权码」,拿新的 16 位授权码替换代码里的旧值 ——旧授权码可能已失效

  4. 确认你填的是授权码,不是 QQ 密码(填密码也会导致认证失败 / 断连)

  5. 如果这是新设备 / 新 IP 首次 SMTP 登录,先在网页版正常登录一次,再测程序(QQ 对首次异地登录有静默风控)

同时可以试的替代方案

换成 465 端口(隐式 SSL),有些网络环境对 587 的 STARTTLS 有干扰,465 更稳:

client.Connect("smtp.qq.com", 465, SecureSocketOptions.SslOnConnect);

注意 465 必须配 SslOnConnect,587 必须配 StartTls,两者不能混用。


该文章在 2026/9/22 9:46:10 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号