smtp发送邮件偶尔会遇到超时的情况,故换MailKit发送尝试。

引用MailKit包时,注意版本需要支持当前Framework的版本

using (var smtp = new MailKit.Net.Smtp.SmtpClient()){MimeMessage mail = new MimeMessage();//发送方mail.From.Add(new MailboxAddress(request.From, request.From));//接受方mail.To.Add(new MailboxAddress(request.To, request.To));//标题mail.Subject = request.Subject;//抄送邮箱if (request.CC != null && request.CC.Length > 0){foreach (var c in request.CC){mail.Cc.Add(new MailboxAddress(c));}}//密件抄送邮箱if (request.BCC != null && request.BCC.Length > 0){foreach (var c in request.BCC){mail.Bcc.Add(new MailboxAddress(c));}}var multipart = new Multipart("mixed");//内容if (!string.IsNullOrEmpty(request.HtmlBody)){var Html = new TextPart(MimeKit.Text.TextFormat.Html){Text = request.HtmlBody};multipart.Add(Html);}//附件if (request.Attachments != null){foreach (var attachment in request.Attachments){if ((!string.IsNullOrEmpty(attachment.MediaType) && attachment.MediaType == MediaTypeNames.Application.Zip) || attachment.FileName.EndsWith(".zip")){var attimg = new MimePart(MediaTypeNames.Application.Zip){ContentObject = new ContentObject(new MemoryStream(attachment.FileData), ContentEncoding.Default),ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),ContentTransferEncoding = ContentEncoding.Base64,FileName = attachment.FileName,IsAttachment = true,};multipart.Add(attimg);}else if ((!string.IsNullOrEmpty(attachment.MediaType) && attachment.MediaType == MediaTypeNames.Application.Pdf) || attachment.FileName.EndsWith(".pdf")){var attimg = new MimePart(MediaTypeNames.Application.Pdf){ContentObject = new ContentObject(new MemoryStream(attachment.FileData), ContentEncoding.Default),ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),ContentTransferEncoding = ContentEncoding.Base64,FileName = attachment.FileName,IsAttachment = true,};multipart.Add(attimg);}else{var attimg = new MimePart(){ContentObject = new ContentObject(new MemoryStream(attachment.FileData), ContentEncoding.Default),ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),ContentTransferEncoding = ContentEncoding.Base64,FileName = attachment.FileName,IsAttachment = true,};multipart.Add(attimg);}}}mail.Body = multipart;smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;//连接邮箱服务器smtp.Connect(request.SmtpServer ?? smtpServer, request.Port, request.EnableSsl);//登录认证if (!string.IsNullOrWhiteSpace(request.FromUserId)){smtp.Authenticate(request.FromUserId, request.PasswordOfFrom); //一些邮件服务器除发送人邮箱外需要发送人Id验证}else{smtp.Authenticate(request.From, request.PasswordOfFrom);}smtp.Timeout = 600000;Yahee.Logging.Log4net.LoggerManager.ErrorLog.Error("SendEmailService begin: " + request.Subject);smtp.Send(mail);smtp.Disconnect(true);}
/// <summary>/// 邮寄发送接口参数类/// </summary>public class SendEmailRequest{/// <summary>/// 发送人邮箱/// </summary>public string From{get;set;}/// <summary>/// 发送人Id(一些邮件服务器除发送人邮箱外需要发送人Id验证)/// </summary>public string FromUserId{get;set;}/// <summary>/// 密码明文/// 空值。使用admin@yahee.com.cn发送邮件,/// 非空值,使用发送人邮箱发送邮件/// </summary>public string PasswordOfFrom{get;set;}/// <summary>/// 收件邮箱/// </summary>public string To{get;set;}/// <summary>/// 抄送邮箱集合/// </summary>public string[] CC{get;set;}/// <summary>/// 密送邮箱集合/// </summary>public string[] BCC{get;set;}/// <summary>/// 主题/// </summary>public string Subject{get;set;}/// <summary>/// 带html的内容/// </summary>public string HtmlBody{get;set;}/// <summary>/// 需要附加的附件集合/// </summary>public FileAttachment[] Attachments{get;set;}/// <summary>/// 是否新增发送记录/// </summary>private bool _isInsertSendEmail = true;public bool IsInsertSendEmail{set{_isInsertSendEmail = value;}get{return _isInsertSendEmail;}}/// <summary>/// 邮件服务器/// //必须和密码同步/// </summary>public string SmtpServer{get;set;}/// <summary>/// 发送端口/// </summary>public int Port{get;set;}/// <summary>/// 是否需要SSL验证/// </summary>public bool EnableSsl{get;set;}/// <summary>/// 是否需要身份验证/// </summary>public bool IsSendAuth{get;set;}}public class FileAttachment{/// <summary>/// 附件在邮件中的名称/// </summary>public string FileName{get;set;}/// <summary>/// 文件内容/// </summary>public byte[] FileData{get;set;}/// <summary>/// 附件类型/// </summary>/// <see cref="System.Net.Mime.MediaTypeNames"/>public string MediaType{get;set;}}
附件添加string fileAttachmentPath2 = @"E:\software\XXX.zip";FileAttachment attachment2 = new FileAttachment();attachment2.FileName = "XXX.zip";attachment2.FileData = System.IO.File.ReadAllBytes(fileAttachmentPath2);attachment2.MediaType = System.Net.Mime.MediaTypeNames.Application.Zip;allAttachments.Add(attachment2);

MailKit发送邮件相关推荐

  1. .NetCore使用NETCore.MailKit发送邮件

    前言 平时工作中很少用到需要发邮件的功能,所以邮件这块的功能也没有太过关注.近期有一个项目需要接收用户的反馈,上边决定使用邮件,直接将反馈信息发送给领导,也就有了这篇文章.实现发邮件不难,但是开发中遇 ...

  2. ABP VNext 利用QQ邮箱发送邮件

    ABP VNext 利用QQ邮箱发送邮件 1.配置邮箱 1.1 设置 1.2账户 1.3 开启邮箱服务 1.4 生成授权码 2 默认的SmtpEmailSender发送邮件 2.1 生成数据库 2.2 ...

  3. Asp.Net Core 快速邮件队列设计与实现

    发送邮件几乎是软件系统中必不可少的功能,在Asp.Net Core 中我们可以使用MailKit发送邮件,MailKit发送邮件比较简单,网上有许多可以参考的文章,但是应该注意附件名长度,和附件名不能 ...

  4. .NET Core 实现定时抓取博客园首页文章信息并发送到邮箱

    前言 大家好,我是晓晨.许久没有更新博客了,今天给大家带来一篇干货型文章,一个每隔5分钟抓取博客园首页文章信息并在第二天的上午9点发送到你的邮箱的小工具.比如我在2018年2月14日,9点来到公司我就 ...

  5. vs基于控制台应用程序的定时发送邮件_.NET Core 下收发邮件之 MailKit

    利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理. MailKit开源地址:ht ...

  6. flask-mail异步发送邮件_.NET Core使用FluentEmail发送邮件

    前言 在实际的项目开发中,我们会遇到许多需要通过程序发送邮件的场景,比如异常报警.消息.进度通知等等.一般情况下我们使用原生的SmtpClient类库居多,它能满足我们绝大多数场景.但是使用起来不够简 ...

  7. .NET Core使用FluentEmail发送邮件

    前言 在实际的项目开发中,我们会遇到许多需要通过程序发送邮件的场景,比如异常报警.消息.进度通知等等.一般情况下我们使用原生的SmtpClient类库居多,它能满足我们绝大多数场景.但是使用起来不够简 ...

  8. 排坑 | Exceptionless 5.x 无法正常发送邮件

    [问题解决]| 作者 / Edison Zhou 这是恰童鞋骚年的第282篇原创内容 你有碰到过通过docker部署Exceptionless无法发送邮件的问题吗?此解决办法适用于Exceptionl ...

  9. .NET Core 使用MailKit发送电子邮件

    点击上方蓝字关注"汪宇杰博客" 发送邮件通知的功能在各种系统里都很常见.我的博客也能在有新评论.新回复,或者文章被其他网站引用时向管理员发送邮件.那么在.NET Core里,如何实 ...

最新文章

  1. .Net Discovery系列文章阅读索引--带你探索未知的.Net世界
  2. SAP采购Invoice保存检查增强:INVOICE_UPDATE
  3. SAP批次级别的意义及启用操作
  4. filter执行先后问题_filter的执行顺序是怎样的?
  5. oracle 在线表分析报告,Oracle Statspack分析报告详解(一)
  6. BugkuCTF-Crypto题Crack it
  7. [转载] WSDL2Java详细使用说明【官方最全说明】
  8. jquery validate.addMethod 正则表达式 (自定义验证方法)
  9. mysql索引数据结构图解_MySQL索引底层结构与实现原理
  10. 系统学习深度学习(四十二)--从AE到VAE
  11. 游戏设计阻力探秘之扩展空间
  12. 易用性软件测试用例,易用性测试用例集.doc
  13. 常用1寸,2寸照片标准尺寸
  14. android 如何播放音频,android如何播放和录制音频
  15. CentOS官网下载所需版本的CentOS版本方法
  16. linux php虚拟主机,linux上php虚拟主机(linux搭建虚拟主机)
  17. vue使用原生高德地图
  18. 聊天机器人php源码,(2)聊天机器人API
  19. 虚幻4 游戏引擎(二):蓝图教学
  20. 微信支付,小程序支付V3

热门文章

  1. 用相对定位进行布局。
  2. 采购HDI盲埋孔电路板的注意事项?
  3. 第六期大咖实战分享 | 联邦学习落地金控集团的挑战与思考
  4. 金融风控训练营--Task 02 EDA探索性数据分析 学习笔记
  5. C++标准模板库笔记
  6. 利用国际商品条码查询(GS1)来鉴别商品的真伪
  7. m基于stft方法的跳频信号解跳和GFSK信号解调,并输出跳频图案
  8. Python实现两个图的交运算、并运算、差运算、对称差运算、联运算、积图、合成图
  9. 用ASPOSE将PDF转为word(解除页数限制和去水印)
  10. 笔记本android启动画面,android解锁界面开发分分钟教你做锁屏软件 -电脑资料