文章目录

  • C#对邮件的支持
  • MailPlatform.cs
  • MailBuilder.cs
  • 配置QQ邮箱的权限

C#对邮件的支持

SMTP协议
SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从>源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

而.NET平台下对Mail的发送封装的已经很完善了,引用库

System.Net.Mail;
System.Net.Mime;

MailPlatform.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;namespace MailApi
{public class MailPlatform{private List<(MailAddress,string)>? _mailinformation;public MailPlatform(IList<(MailAddress,string)>? pairs){_mailinformation = (List<(MailAddress, string)>?)pairs ?? throw new Exception("错误的初始化");}public void SendMail(MailMessage message){var info = _mailinformation?.OrderBy(s => Guid.NewGuid()).FirstOrDefault() ?? throw new Exception("未初始化任何设置");message.From = info.Item1;var client = new SmtpClient(){EnableSsl = true,UseDefaultCredentials = false,Credentials = new System.Net.NetworkCredential(info.Item1.Address, info.Item2),DeliveryMethod = SmtpDeliveryMethod.Network,Host = "smtp." + info.Item1.Host};client.Send(message);}public void SendMailAsync(MailMessage message, SendCompletedEventHandler CompletedMethod, object args){var info = _mailinformation?.OrderBy(s => Guid.NewGuid()).FirstOrDefault() ?? throw new Exception("未初始化任何设置");message.From = info.Item1;var client = new SmtpClient(){EnableSsl = true,UseDefaultCredentials = false,Credentials = new System.Net.NetworkCredential(info.Item1.Address, info.Item2),DeliveryMethod = SmtpDeliveryMethod.Network,Host = "smtp." + info.Item1.Host};client.SendCompleted += new SendCompletedEventHandler(CompletedMethod);client.SendAsync(message, args);}     }
}

MailPlatform类用于发送邮件,在实例化MailPlatform的时候,IList<(MailAddress,string)>? pairs
参数用于初始化发送方的邮件设置,而该平台的作用是随机调用平台里面的发送单元进行发送,避免多数据同时发送而造成堵塞等问题,初始化例子

MailPlatform platform = new MailPlatform(new List<(MailAddress, string)>(){(new MailAddress("您的第一个邮箱"),"授权码"),(new MailAddress("您的第二个邮箱"), "授权码"),(new MailAddress("您的第n个邮箱"),"授权码")});

发送的时候调用SendMail即可,传入的MailMessage可以用Builder进行初始化,而异步函数SendMailAsync,可以传入完成发送后的回调函数进行验证,args则为传入数据

MailBuilder.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
using System.Net.Mime;namespace MailApi
{public class MailBuilder{public MailBuilder() { }public List<string>? Address { set; get; } = new List<string>();public string? Body { set; get; } = string.Empty;public Encoding? Encoding { set; get; } = Encoding.UTF8;public bool? IsHtml { set; get; } = true;public string? Subject { set; get; } = string.Empty;public List<string>? Attachments { set; get; } = new List<string>();public MailMessage Build(){var message = new MailMessage();if (Address?.Count == 0) throw new Exception("发送人不能为空");foreach (var c in Address){message.To.Add(c);}message.Subject = Subject;message.Body = Body;message.IsBodyHtml = IsHtml ?? true;message.BodyEncoding = Encoding;message.Priority = MailPriority.Normal;message.SubjectEncoding = Encoding;foreach(var c in Attachments){if (!File.Exists(c)) throw new Exception("附件文件不存在");var data = new Attachment(c, MediaTypeNames.Application.Octet);//实例化附件 data.ContentDisposition.CreationDate = File.GetCreationTime(c);data.ContentDisposition.ModificationDate = File.GetLastAccessTime(c);data.ContentDisposition.ReadDate = DateTime.Now;message.Attachments.Add(data);//添加到附件中 }return message;}public Task<MailMessage> BuildAsync(){Task<MailMessage> message = new Task<MailMessage>(() =>{var message = new MailMessage();if (Address?.Count == 0) throw new Exception("发送人不能为空");foreach (var c in Address){message.To.Add(c);}message.Subject = Subject;message.Body = Body;message.IsBodyHtml = IsHtml ?? true;message.BodyEncoding = Encoding;message.Priority = MailPriority.Normal;message.SubjectEncoding = Encoding;foreach (var c in Attachments){if (!File.Exists(c)) throw new Exception("附件文件不存在");var data = new Attachment(c, MediaTypeNames.Application.Octet);//实例化附件 data.ContentDisposition.CreationDate = File.GetCreationTime(c);data.ContentDisposition.ModificationDate = File.GetLastAccessTime(c);data.ContentDisposition.ReadDate = DateTime.Now;message.Attachments.Add(data);//添加到附件中 }return message;});message.Start();return message;}}
}

MailBuilder类可以快速创建MailMessage信息,例

builder.Body = @"纸墨青鸳而随风而舞";
builder.Subject = "这是一封测试信息";
builder.Address.Add("你的目标邮箱1");
builder.Address.Add("你的目标邮箱2");
builder.Attachments.Add("附件地址1");
builder.Attachments.Add("附件地址2");
var mail = builder.Build();
platform.SendMail(mail);

在该模式下,只需要向builder中增加一个Address和设置Body和Subject信息即可进行发送,快速而简洁

配置QQ邮箱的权限

Step1.登录邮箱后选择设置

Step2.选择账户

Step3.下滑找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

Step4.开启POP3/SMTP服务并验证拿到授权码

C# E-Mail邮件发送相关推荐

  1. Java Mail 邮件发送(一):入门Demo

    本文首发于简书,Java Mail 邮件发送(一):Demo 上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以 ...

  2. spring mail 发送html simple,SpringBoot整合Mail邮件发送

    Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置. 添加依赖 org.springframework.bo ...

  3. Linux mail 邮件发送

    Linux mail 邮件介绍 在Linux系统下我们可以通过"mail"命令,发送邮件,在运维中通常我们它来实现邮件告警. 安装 (方案1) 一.安装邮件服务 yum insta ...

  4. php发送邮件怎么配置,php mail()邮件发送配置方法

    这两天写了个方法用到php mail()本以为php提供的这个方法非常简单.方便.易用,其实不然! php mail()函数需要配置才可以发邮件的哦,下面配置方法: 如果你没有使用windows,那么 ...

  5. Java mail 邮件发送 附件文件名过长的问题 版本1.5及以上

    在使用javamail 1.5版本的时候,如果附件文件名过长,会错误显示为"未命名的附件 00439.dat" 解决方案如下: 一.Javamail jar包退回1.4版本 或者 ...

  6. 封装一个邮件发送工具类,一个字,巴适

    系列文章目录 文章目录 系列文章目录 前言 一. 介绍 二.二话不说开始干 1.引入库 2. 邮件发送实体(Mail) 3. 邮件发送类型枚举(MailType ) 4.邮件发送抽象类(Abstrac ...

  7. java邮件支持_使用Spring的JAVA Mail支持简化邮件发送功能

    闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...

  8. 利用System.Net.Mail和多线程实现邮件发送

    对于邮件发送,一般来说,程序会响应超过1秒,这样对于用户体验来说,让用户等待的时间过长,而且发送的邮件越多时间就越长,所以这里我利用了线程的来处理邮件发送这种耗时的工作,废话不多说,直接上代码 pri ...

  9. SpringBoot中整合Mail实现发送带附件的邮件

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/35688 实现最简单的带标题以及文本内容的邮件发送: https:/ ...

  10. php发送邮件,标题是乱码,php的mail函数发送UTF-8编码中文邮件时标题乱码怎么办?...

    php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法:1.将subject里头的文字符合RFC 2047的规范:2.在headers中添加[content-type]:3.对用来发送邮件 ...

最新文章

  1. UNITY3D拓展编辑器 - 目录
  2. RDKit | 基于随机森林(RF)的机器学习模型预测hERG阻断剂活性
  3. linux 检测 iptables 是否有重复的规则
  4. 模拟spring - 简单实现spring IOC
  5. 根据多个点使用canvas贝赛尔曲线画一条平滑的曲线
  6. 孙宇java_[JAVA] 孙宇老师Struts2+Hibernate4+Maven+EasyUI+SpringMvc+Spring+Mybatis+Maven整合课程...
  7. jQuery实现列表数据从右至左滚动(类似弹幕)
  8. C语言指向结构体的指针的例子
  9. java之Cookie详解
  10. 计算机控制系统中采样速率的选择
  11. mysql时间类型英文_英文日期格式及缩写
  12. 微信小程序分享/转发功能方法
  13. OpenCV 读写图像、读写像素、修改像素值(案例:图像反处理)
  14. 名茶事典——【贡(寿)眉】
  15. 爬取北京链家二手房数据
  16. 17级智能信息处理与控制团支部大会
  17. 这个小程序厉害了!一键生成花式昵称,让你的微信从此与众不同!
  18. 前端项目运行错误提示及解决proble (1 error, 0 warnings) m1 error and 0 warnings potentially fixable with the `--fi
  19. Go语言云原生与微服务(一)云原生架构
  20. 通过nginx防护可疑攻击的配置指引

热门文章

  1. PS CJ34预算转借
  2. QT下以ADO连接ORACLE数据库
  3. 全网最火! 阿里 P6 级,廖雪峰的「全栈架构师」开讲了
  4. 网络协议学习(B站观看最多)
  5. javascript广告漂浮效果代码
  6. 查看linux命名空间的指令,linux 命名空间的相关命令 - (sunznx) 振翅飞翔
  7. 【工具推荐】在线latex公式编辑器(可用鼠标交互)
  8. sql date_format用法
  9. arm linux vi键盘错乱,Ubuntu Server 18.04安装后vi命令解决键盘错乱方法和wifi连接之后不能上网...
  10. MTK logo.bin手动制作(个人博客:浏览器直接输入wugn.tech)