C#操作QQ邮箱发送电子邮件原来这么简单。。。。
在贴代码之前,首先需要给QQ邮箱开服务IMAP/SMTP服务,详细开通方法见 "开通方法"(可能需要发送收费短信,所以只要开通这一个服务就好了)。
这边主要就是为了一个服务的授权码,如下图:
服务开好之后,直接上代码了(一个邮件帮助类):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | using System; using System.Collections.Generic; using System.Linq; using System.Net.Mail; using System.Net.Mime; using System.Text; namespace Mail { public class SendMail { private MailMessage mailMessage; private SmtpClient smtpClient; private string password; //发件人密码 /// <summary> /// 设置MailMessage的实例 /// </summary> /// <param name="To">收件人地址</param> /// <param name="From">发件人地址</param> /// <param name="Body">邮件正文</param> /// <param name="Title">邮件的主题</param> /// <param name="Password">发件人密码</param> public SendMail( string [] To, string From, string Body, string Title, string Password) { mailMessage = new MailMessage(); foreach ( var item in To) { mailMessage.To.Add(item); } mailMessage.From = new System.Net.Mail.MailAddress(From); mailMessage.Subject = Title; mailMessage.Body = Body; mailMessage.IsBodyHtml = true ; mailMessage.BodyEncoding = System.Text.Encoding.UTF8; mailMessage.Priority = System.Net.Mail.MailPriority.Normal; this .password = Password; } /// <summary> /// 添加附件 /// </summary> public void Attachments( string Path) { string [] path = Path.Split( ',' ); Attachment data; ContentDisposition disposition; for ( int i = 0; i < path.Length; i++) { data = new Attachment(path[i], MediaTypeNames.Application.Octet); //实例化附件 disposition = data.ContentDisposition; disposition.CreationDate = System.IO.File.GetCreationTime(path[i]); //获取附件的创建日期 disposition.ModificationDate = System.IO.File.GetLastWriteTime(path[i]); //获取附件的修改日期 disposition.ReadDate = System.IO.File.GetLastAccessTime(path[i]); //获取附件的读取日期 mailMessage.Attachments.Add(data); //添加到附件中 } } /// <summary> /// 异步发送邮件 /// </summary> /// <param name="CompletedMethod"></param> public void SendAsync(SendCompletedEventHandler CompletedMethod) { if (mailMessage != null ) { smtpClient = new SmtpClient(); smtpClient.EnableSsl = true ; // 指定 System.Net.Mail.SmtpClient 是否使用安全套接字层 (SSL) 加密连接,必须在实例身份前面设置 smtpClient.UseDefaultCredentials = false ; smtpClient.Credentials = new System.Net.NetworkCredential(mailMessage.From.Address, password); //设置发件人身份的票据 smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtpClient.Host = "smtp." + mailMessage.From.Host; smtpClient.SendCompleted += new SendCompletedEventHandler(CompletedMethod); //注册异步发送邮件完成时的事件 smtpClient.SendAsync(mailMessage, mailMessage.Body); } } /// <summary> /// 发送邮件 /// </summary> public void Send() { if (mailMessage != null ) { using (smtpClient = new SmtpClient()) { smtpClient.EnableSsl = true ; // 指定 System.Net.Mail.SmtpClient 是否使用安全套接字层 (SSL) 加密连接,必须在实例身份前面设置 smtpClient.UseDefaultCredentials = false ; smtpClient.Credentials = new System.Net.NetworkCredential(mailMessage.From.Address, password); //设置发件人身份的票据 smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; smtpClient.Host = "smtp." + mailMessage.From.Host; smtpClient.Send(mailMessage); mailMessage.Attachments.Dispose(); } } } } } |
调用方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Mail { class Program { static void Main( string [] args) { string [] toArr = { "1234567890@qq.com" }; var sbSql= new System.Text.StringBuilder(); sbSql.Append( "hauge无敌是多么的寂寞" ); SendMail sendmail = new SendMail(toArr, "0123456789@qq.com" , sbSql.ToString(), "测试" , "QQ邮箱服务授权码" ); sendmail.Send(); } } } |
这边的QQ邮箱服务授权码,就是上面开通的IMAP/SMTP服务的16位授权码。
本文只是记录学习心得,如果有误请提示博主加以修正。。。
谢谢您那么帅气,还能看完小主的文言文!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)