C# SmtpClient发送邮件以及Mailkit 邮件发送(包含附件)

在进行微信小程序以及手机app开发时,作为后端就需要进行接口的开发。

像平常一样部署的将数据以邮件形式发送

接口代码内容如下:

[WebMethod(Description = "下载到邮箱")]
        public string SendQQMail(string key, string strto, string strfile, string strfileName)//key是为了安全校验,strto是接收者的邮箱,strfile为附件的路径,strfileName附件名称
        {
             string systemKey = "37a3ab25-cd1a-481b-a675-87161b20c19e";
             if (key == systemKey)
             {
                 try
                 {
                     string strFrom = "xxx@qq.com";
                     string strSubject = "发送测试";
                     string strFromName = "发送测试";
                     string strBody = "发送测试";
                     //企业邮箱smtp
                     string strSmtpServer = "smtp.qq.com";
                     string strFromPass = "xxxxxxx";//授权码
                     SmtpClient smtpClient = new SmtpClient();
                     smtpClient.EnableSsl = true;
                     smtpClient.UseDefaultCredentials = false;//先设置
                     smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; //指定电子邮件发送方式
                     smtpClient.Host = strSmtpServer; //指定SMTP服务器
                     smtpClient.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass); //用户名和授权码
                     // 发送邮件设置
                     //MailMessage mailMessage = new MailMessage(strFrom, strto); // 发送人和收件人
                     MailMessage mailMessage = new MailMessage();
                     //发件人地址
                     //如是自己,在此输入自己的邮箱
                     mailMessage.From = new MailAddress(strFrom, strFromName, Encoding.UTF8);
                     //收件人地址
                     mailMessage.To.Add(new MailAddress(strto));
                     // 添加附件
                     if (strfile != "")
                     { 
                         {
                             Attachment mailAttach_1 = new Attachment(strfile);
                             if (strfile.Contains('.'))
                             {
                                 mailAttach_1.Name = strfileName + strfile.Substring(strfile.LastIndexOf('.'));
                             } 
                             else mailAttach_1.Name = strfileName + ".xlsx";
                             mailMessage.Attachments.Add(mailAttach_1);                         
                     }
                     mailMessage.Subject = strSubject; //主题
                     mailMessage.Body = strBody;//内容
                     mailMessage.BodyEncoding = Encoding.UTF8; //正文编码
                     mailMessage.IsBodyHtml = true; //设置为HTML格式
                     mailMessage.Priority = MailPriority.Low; //优先级                     
                     smtpClient.Send(mailMessage);
                     Console.WriteLine();
                     Console.ReadLine();
                     return "发送成功";
                 }
                 catch (Exception ex)
                 {
                     System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\log.txt");
                     file.WriteLine(ex.StackTrace);
                     file.Close();
                     return ex.Message;
                 }
             }
             else
             {
                 return "";
             }
        }

小程序在部署iis的时候需要tls协议,主流的邮箱服务商加密协议使用的都是TLS。
但是System.Net.Mail.SmtpClient 不支持较新的TLS协议因此需要使用另一个

MailKit是一个开源的基于MimeKit的跨平台邮件收发类库,支持IMAP、POP3、SMTP。其中SmtpClient也支持TLS协议.

可以很好的支持 .NET Core以及 .NET Framework框架的邮件发送

using MailKit.Net.Smtp;
using MailKit;
using MimeKit;

接口代码如下:

[WebMethod(Description = "下载到邮箱")]
        public string SendQQMail(string key, string strto, string strfile, string strfileName)//key是为了安全校验,strto是接收者的邮箱,strfile为附件的路径,strfileName附件名称
        {
             string systemKey = "37a3ab25-cd1a-481b-a675-87161b20c19e";
             if (key == systemKey)
             {
                 try
                 {
                    var message = new MimeMessage();
                    message.From.Add(new MailboxAddress("test", "xxxxxx@qq.com"));//发送人的名称以及邮箱
                    message.To.Add(new MailboxAddress("test", strto));//接收人的名称以及邮箱
                    message.Subject = "发送测试";//邮件主题
                    //html or plain
                    var bodyBuilder = new BodyBuilder();
                    bodyBuilder.HtmlBody = "<b>发送测试</b>";
                    bodyBuilder.TextBody = "发送测试";
                    message.Body = bodyBuilder.ToMessageBody();
                    Multipart multipart = new Multipart("mixed");
                    //附件
                    string absolutePath = strfile;
                    MimePart attachment = new MimePart()
                    {
                        //读取文件,只能用绝对路径
                        ContentObject = new ContentObject(File.OpenRead(absolutePath), ContentEncoding.Default),
                        ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),
                        ContentTransferEncoding = ContentEncoding.Base64,
                        //文件名字
                        FileName = strfileName + ".xlsx"
                    };
                    multipart.Add(attachment);
                    message.Body = multipart;
                    using (var client = new MailKit.Net.Smtp.SmtpClient())
                    {
                        client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                        //smtp服务器,端口,是否开启ssl
                        client.Connect("smtp.qq.com", 465, true);
                        client.Authenticate("xxxxx@qq.com", password);//发送者邮箱以及授权码
                        client.Send(message);
                        client.Disconnect(true);
                    }
                    return "发送成功";
                }
                catch (Exception ex)
                 {
                     System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\log.txt");
                     file.WriteLine(ex.StackTrace);
                     file.Close();
                     return ex.Message;
                 }
             }
             else
             {
                 return "";
             }
        }

要使用需要安装打开vs2019 Nuget 搜索一下两个包 两个m开头的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值