0

0

c# 如何发送邮件

星降

星降

发布时间:2026-01-04 12:14:46

|

420人浏览过

|

来源于php中文网

原创

smtpclient 发送邮件需配置正确服务器、端口、凭据并启用 ssl/tls;.net core 5+ 已过时但可用,推荐 mailkit;html 邮件须设 isbodyhtml=true、用内联样式和 table 布局;附件需注意流生命周期和中文名编码;排查错误优先检查网络、授权码、tls 版本。

c# 如何发送邮件

SmtpClient 发送纯文本邮件最简单

只要 SMTP 服务器地址、端口、账号密码正确,几行代码就能发出去。注意 .NET Core 5+ 已将 SmtpClient 标记为“过时”,但目前仍可正常使用;若用 .NET 6+ 且追求长期维护,建议迁移到第三方库(如 MailKit),不过对内部通知类小项目,SmtpClient 足够快、够稳。

关键点:

  • SmtpClient 默认不启用 SSL/TLS,但现代邮箱(Gmail、Outlook、腾讯企业邮)基本要求 EnableSsl = true
  • 端口不是固定 25:Gmail 用 587(STARTTLS),部分服务器用 465(SSL)
  • 发件人邮箱必须和 Credentials 的用户名一致,否则多数 SMTP 服务会拒信
  • 别把密码硬编码在代码里——用 ConfigurationManagerIConfiguration 读取
var client = new SmtpClient("smtp.qq.com")
{
    Port = 587,
    Credentials = new NetworkCredential("your@qq.com", "your-app-password"),
    EnableSsl = true
};

var mail = new MailMessage
{
    From = new MailAddress("your@qq.com"),
    Subject = "测试邮件",
    Body = "这是一封纯文本邮件",
    IsBodyHtml = false
};
mail.To.Add("target@example.com");

client.Send(mail);

发送 HTML 邮件要设 IsBodyHtml = true 并注意内联样式

HTML 邮件在客户端渲染差异大,<style></style> 标签和外部 CSS 基本无效,必须用 style="..." 写内联样式。图片尽量用绝对 URL(https:// 开头),避免引用本地路径或相对路径。

常见陷阱:

  • 忘记设 IsBodyHtml = true → 邮件正文显示原始 HTML 标签
  • 用了 <div> 或 Flex 布局 → 多数邮箱客户端(尤其是 Outlook)不支持,推荐用老式 <code><table> 布局 <li>字体写 <code>font-family: 'Segoe UI', sans-serif → 安全字体只写 Verdana, Arial, Helvetica, sans-serif
  • mail.Body = "<p style=\"color:#333;font-family:Verdana,Arial,sans-serif\">欢迎<strong>注册</strong>!</p>";
    mail.IsBodyHtml = true;

    带附件时用 Attachment 类,注意文件流不能被提前释放

    附件本质是内存或磁盘上的字节流,添加到 MailMessage.Attachments 后,SmtpClient.Send() 期间会读取它。如果用 new Attachment(File.OpenRead(...)),文件流可能在发送前就被 GC 关闭。

    极限网络办公Office Automation
    极限网络办公Office Automation

    专为中小型企业定制的网络办公软件,富有竞争力的十大特性: 1、独创 web服务器、数据库和应用程序全部自动傻瓜安装,建立企业信息中枢 只需3分钟。 2、客户机无需安装专用软件,使用浏览器即可实现全球办公。 3、集成Internet邮件管理组件,提供web方式的远程邮件服务。 4、集成语音会议组件,节省长途话费开支。 5、集成手机短信组件,重要信息可直接发送到员工手机。 6、集成网络硬

    下载

    稳妥做法:

    • new Attachment(string fileName) 构造器(自动管理流)
    • 若需动态生成内容(比如导出 Excel),先写入 MemoryStream,再传给 Attachment,并确保该流在 Send() 完成前未被 Dispose()
    • 附件名含中文?用 Attachment.NameEncoding = Encoding.UTF8 防止乱码
    var attachment = new Attachment(@"C:\report.pdf");
    attachment.NameEncoding = Encoding.UTF8;
    mail.Attachments.Add(attachment);

    SmtpClient.Send() 报错常见原因和快速排查

    错误信息往往模糊,比如 “Failure sending mail” 或 “Unable to connect to the remote server”,实际原因可能差很远。

    优先检查这几项:

    • 网络连通性:telnet smtp.qq.com 587(Windows)或 nc -zv smtp.qq.com 587(Linux/macOS)看是否能通端口
    • 密码是否为“授权码”而非邮箱登录密码(QQ 邮箱、163 邮箱必须开 POP3/SMTP 并生成专用密码)
    • 防火墙或公司代理是否拦截了出站 SMTP 流量
    • .NET 版本是否太低(.NET Framework 4.0+ 支持 TLS 1.2,旧版本默认只启 TLS 1.0,而 Gmail 等已禁用)→ 可加 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

    真正麻烦的是异步发送失败后没异常抛出——SmtpClientSendAsync 在出错时只会触发 SendCompleted 事件,且 e.Error 为 null,得靠日志或调试器捕获真实异常。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

249

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

967

2024.03.01

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.10.25

flex教程
flex教程

php中文网为大家带来了flex教程合集,Flex是采用Flex布局的元素,称为Flex容器(flex container),简称"容器",它的所有子元素自动成为容器成员,有三个核心概念: flex项,需要布局的元素;flex容器,其包含flex项;排列方向,这决定了flex项的布局方向。php中文网还为大家带来flex的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

368

2023.06.14

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1336

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1158

2023.07.27

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

24

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 38.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号