新建项目,引用MailKit和MimeKit NuGet包

using CommonTool.MailKit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ProjectDemo.ConsoleApp
{class Program{static void Main(string[] args){try{var ccList = new List<string>();ccList.Add("*****@qq.com");var recipients = new List<string>();recipients.Add("*****@qq.com");var mailBodyEntity = new MailBodyEntity(){Body = "这是一个测试邮件body内容<a href='http://www.baidu.com'>123</a>",Cc = ccList,//MailBodyType = "html",MailFiles = new List<MailFile>() {new MailFile { MailFilePath = @"D:\文档\File\20180807165402.png", MailFileSubType = "png", MailFileType = "image" },new MailFile { MailFilePath = @"D:\文档\File\TIM截图20180807165402.png", MailFileSubType = "png", MailFileType = "image" }},Recipients = recipients,Sender = "邮件的发件人",SenderAddress = "111111@qq.com",Subject = "测试邮件是否可以发送的标题",};var sendServerConfiguration = new SendServerConfigurationEntity(){SenderPassword = "123456",SmtpPort = 465,IsSsl = true,MailEncoding = "utf-8",SenderAccount = "11111@qq.com",SmtpHost = "smtp.qq.com",};var result=SeedMailHelper.SendMail(mailBodyEntity, sendServerConfiguration);ReceiveEmailHelper.ReceiveEmail();ReceiveEmailHelper.DownloadBodyParts();Console.WriteLine("成功!");Console.ReadLine();}catch (Exception ex){Console.WriteLine(ex.ToString());}}}
}

发送邮件

using MailKit;
using MailKit.Net.Smtp;
using MailKit.Security;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CommonTool.MailKit
{/// <summary>/// 发送邮件/// </summary>public static class SeedMailHelper{/// <summary>/// 发送邮件/// </summary>/// <param name="mailBodyEntity">邮件基础信息</param>/// <param name="sendServerConfiguration">发件人基础信息</param>public static SendResultEntity SendMail(MailBodyEntity mailBodyEntity,SendServerConfigurationEntity sendServerConfiguration){if (mailBodyEntity == null){throw new ArgumentNullException();}if (sendServerConfiguration == null){throw new ArgumentNullException();}var sendResultEntity = new SendResultEntity();using (var client = new SmtpClient(new ProtocolLogger(MailMessage.CreateMailLog()))){client.ServerCertificateValidationCallback = (s, c, h, e) => true;Connection(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);if (sendResultEntity.ResultStatus == false){return sendResultEntity;}SmtpClientBaseMessage(client);// Note: since we don't have an OAuth2 token, disable// the XOAUTH2 authentication mechanism.client.AuthenticationMechanisms.Remove("XOAUTH2");Authenticate(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);if (sendResultEntity.ResultStatus == false){return sendResultEntity;}Send(mailBodyEntity, sendServerConfiguration, client, sendResultEntity);if (sendResultEntity.ResultStatus == false){return sendResultEntity;}client.Disconnect(true);}return sendResultEntity;}/// <summary>/// 连接服务器/// </summary>/// <param name="mailBodyEntity">邮件内容</param>/// <param name="sendServerConfiguration">发送配置</param>/// <param name="client">客户端对象</param>/// <param name="sendResultEntity">发送结果</param>public static void Connection(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,SmtpClient client, SendResultEntity sendResultEntity){try{client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort);}catch (SmtpCommandException ex){sendResultEntity.ResultInformation = $"尝试连接时出错:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}catch (SmtpProtocolException ex){sendResultEntity.ResultInformation = $"尝试连接时的协议错误:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}catch (Exception ex){sendResultEntity.ResultInformation = $"服务器连接错误:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}}/// <summary>/// 账户认证/// </summary>/// <param name="mailBodyEntity">邮件内容</param>/// <param name="sendServerConfiguration">发送配置</param>/// <param name="client">客户端对象</param>/// <param name="sendResultEntity">发送结果</param>public static void Authenticate(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,SmtpClient client, SendResultEntity sendResultEntity){try{client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);}catch (AuthenticationException ex){sendResultEntity.ResultInformation = $"无效的用户名或密码:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}catch (SmtpCommandException ex){sendResultEntity.ResultInformation = $"尝试验证错误:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}catch (SmtpProtocolException ex){sendResultEntity.ResultInformation = $"尝试验证时的协议错误:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}catch (Exception ex){sendResultEntity.ResultInformation = $"账户认证错误:{0}" + ex.Message;sendResultEntity.ResultStatus = false;}}/// <summary>/// 发送邮件/// </summary>/// <param name="mailBodyEntity">邮件内容</param>/// <param name="sendServerConfiguration">发送配置</param>/// <param name="client">客户端对象</param>/// <param name="sendResultEntity">发送结果</param>public static void Send(MailBodyEntity mailBodyEntity, SendServerConfigurationEntity sendServerConfiguration,SmtpClient client, SendResultEntity sendResultEntity){try{client.Send(MailMessage.AssemblyMailMessage(mailBodyEntity));}catch (SmtpCommandException ex){switch (ex.ErrorCode){case SmtpErrorCode.RecipientNotAccepted:sendResultEntity.ResultInformation = $"收件人未被接受:{ex.Message}";break;case SmtpErrorCode.SenderNotAccepted:sendResultEntity.ResultInformation = $"发件人未被接受:{ex.Message}";break;case SmtpErrorCode.MessageNotAccepted:sendResultEntity.ResultInformation = $"消息未被接受:{ex.Message}";break;}sendResultEntity.ResultStatus = false;}catch (SmtpProtocolException ex){sendResultEntity.ResultInformation = $"发送消息时的协议错误:{ex.Message}";sendResultEntity.ResultStatus = false;}catch (Exception ex){sendResultEntity.ResultInformation = $"邮件接收失败:{ex.Message}";sendResultEntity.ResultStatus = false;}}/// <summary>/// 获取SMTP基础信息/// </summary>/// <param name="client">客户端对象</param>/// <returns></returns>public static MailServerInformation SmtpClientBaseMessage(SmtpClient client){var mailServerInformation = new MailServerInformation{Authentication = client.Capabilities.HasFlag(SmtpCapabilities.Authentication),BinaryMime = client.Capabilities.HasFlag(SmtpCapabilities.BinaryMime),Dsn = client.Capabilities.HasFlag(SmtpCapabilities.Dsn),EightBitMime = client.Capabilities.HasFlag(SmtpCapabilities.EightBitMime),Size = client.MaxSize};return mailServerInformation;}}
}

基础类

using MimeKit;
using MimeKit.Text;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CommonTool.MailKit
{/// <summary>/// 邮件信息/// </summary>public static class MailMessage{/// <summary>/// 组装邮件文本/附件邮件信息/// </summary>/// <param name="mailBodyEntity">邮件消息实体</param>/// <returns></returns>public static MimeMessage AssemblyMailMessage(MailBodyEntity mailBodyEntity){if (mailBodyEntity == null){throw new ArgumentNullException(nameof(mailBodyEntity));}var message = new MimeMessage();//设置邮件基本信息SetMailBaseMessage(message, mailBodyEntity);var multipart = new Multipart("mixed");//插入文本消息if (!string.IsNullOrEmpty(mailBodyEntity.Body)){var alternative = new MultipartAlternative{AssemblyMailTextMessage(mailBodyEntity.Body, mailBodyEntity.MailBodyType)};multipart.Add(alternative);}//插入附件foreach (var mailFile in mailBodyEntity.MailFiles){if (mailFile.MailFilePath != null && File.Exists(mailFile.MailFilePath)){var mimePart = AssemblyMailAttachmentMessage(mailFile.MailFileType, mailFile.MailFileSubType,mailFile.MailFilePath);multipart.Add(mimePart);}}//组合邮件内容message.Body = multipart;return message;}/// <summary>/// 设置邮件基础信息/// </summary>/// <param name="minMessag"></param>/// <param name="mailBodyEntity"></param>/// <returns></returns>public static MimeMessage SetMailBaseMessage(MimeMessage minMessag, MailBodyEntity mailBodyEntity){if (minMessag == null){throw new ArgumentNullException();}if (mailBodyEntity == null){throw new ArgumentNullException();}//插入发件人minMessag.From.Add(new MailboxAddress(mailBodyEntity.Sender, mailBodyEntity.SenderAddress));//插入收件人if(mailBodyEntity.Recipients.Any()){foreach (var recipients in mailBodyEntity.Recipients){minMessag.To.Add(new MailboxAddress(recipients));}}//插入抄送人if (mailBodyEntity.Cc!=null&&mailBodyEntity.Cc.Any()){foreach (var cC in mailBodyEntity.Cc){minMessag.Cc.Add(new MailboxAddress(cC));}}//插入密送人if (mailBodyEntity.Bcc != null && mailBodyEntity.Bcc.Any()){foreach (var bcc in mailBodyEntity.Bcc){minMessag.Bcc.Add(new MailboxAddress(bcc));}}//插入主题minMessag.Subject = mailBodyEntity.Subject;return minMessag;}/// <summary>/// 组装邮件文本信息/// </summary>/// <param name="mailBody">邮件内容</param>/// <param name="textPartType">邮件类型(plain,html,rtf,xml)</param>/// <returns></returns>public static TextPart AssemblyMailTextMessage(string mailBody, TextFormat textPartType){if (string.IsNullOrEmpty(mailBody)){throw new ArgumentNullException();}//var textBody = new TextPart(textPartType)//{//    Text = mailBody,//};//处理查看源文件有乱码问题var textBody = new TextPart(textPartType);textBody.SetText(Encoding.Default, mailBody);return textBody;}/// <summary>/// 组装邮件附件信息/// </summary>/// <param name="fileAttachmentType">附件类型(image,application)</param>/// <param name="fileAttachmentSubType">附件子类型 </param>/// <param name="fileAttachmentPath">附件路径</param>/// <returns></returns>public static MimePart AssemblyMailAttachmentMessage(string fileAttachmentType, string fileAttachmentSubType, string fileAttachmentPath){if (string.IsNullOrEmpty(fileAttachmentSubType)){throw new ArgumentNullException();}if (string.IsNullOrEmpty(fileAttachmentType)){throw new ArgumentNullException();}if (string.IsNullOrEmpty(fileAttachmentPath)){throw new ArgumentNullException();}var fileName = Path.GetFileName(fileAttachmentPath);var attachment = new MimePart(fileAttachmentType, fileAttachmentSubType){Content = new MimeContent(File.OpenRead(fileAttachmentPath)),ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),ContentTransferEncoding = ContentEncoding.Base64,//FileName = fileName,};//qq邮箱附件文件名中文乱码问题//var charset = "GB18030";attachment.ContentType.Parameters.Add(Encoding.Default, "name", fileName);attachment.ContentDisposition.Parameters.Add(Encoding.Default, "filename", fileName);//处理文件名过长foreach (var param in attachment.ContentDisposition.Parameters)param.EncodingMethod = ParameterEncodingMethod.Rfc2047;foreach (var param in attachment.ContentType.Parameters)param.EncodingMethod = ParameterEncodingMethod.Rfc2047;return attachment;}/// <summary>/// 创建邮件日志文件/// </summary>/// <returns></returns>public static string CreateMailLog(){var logPath = AppDomain.CurrentDomain.BaseDirectory + "/DocumentLog/" +Guid.NewGuid() + ".txt";if (File.Exists(logPath)) return logPath;var fs = File.Create(logPath);fs.Close();return logPath;}}
}

实体

using MimeKit.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CommonTool.MailKit
{/// <summary>/// 邮件内容实体/// </summary>public class MailBodyEntity{/ <summary>/ 邮件文本内容/ </summary>//public string MailTextBody { get; set; }/// <summary>/// 邮件内容类型/// </summary>public TextFormat MailBodyType { get; set; } = TextFormat.Html;/// <summary>/// 邮件附件集合/// </summary>public List<MailFile> MailFiles { get; set; }/// <summary>/// 收件人/// </summary>public List<string> Recipients { get; set; }/// <summary>/// 抄送/// </summary>public List<string> Cc { get; set; }/// <summary>/// 密送/// </summary>public List<string> Bcc { get; set; }/// <summary>/// 发件人/// </summary>public string Sender { get; set; }/// <summary>/// 发件人地址/// </summary>public string SenderAddress { get; set; }/// <summary>/// 邮件主题/// </summary>public string Subject { get; set; }/// <summary>/// 邮件内容/// </summary>public string Body { get; set; }}public class MailFile{/// <summary>/// 邮件附件文件类型 例如:图片 MailFileType="image"/// </summary>public string MailFileType { get; set; }/// <summary>/// 邮件附件文件子类型 例如:图片 MailFileSubType="png"/// </summary>public string MailFileSubType { get; set; }/// <summary>/// 邮件附件文件路径  例如:图片 MailFilePath=@"C:\Files\123.png"/// </summary>public string MailFilePath { get; set; }}/// <summary>/// 邮件服务器基础信息/// </summary>public class MailServerInformation{/// <summary>/// SMTP服务器支持SASL机制类型/// </summary>public bool Authentication { get; set; }/// <summary>/// SMTP服务器对消息的大小/// </summary>public uint Size { get; set; }/// <summary>/// SMTP服务器支持传递状态通知/// </summary>public bool Dsn { get; set; }/// <summary>/// SMTP服务器支持Content-Transfer-Encoding/// </summary>public bool EightBitMime { get; set; }/// <summary>/// SMTP服务器支持Content-Transfer-Encoding/// </summary>public bool BinaryMime { get; set; }/// <summary>/// SMTP服务器在消息头中支持UTF-8/// </summary>public string UTF8 { get; set; }}/// <summary>/// 邮件发送结果/// </summary>public class SendResultEntity{/// <summary>/// 结果信息/// </summary>public string ResultInformation { get; set; } = "发送成功!";/// <summary>/// 结果状态/// </summary>public bool ResultStatus { get; set; } = true;}/// <summary>/// 邮件发送服务器配置/// </summary>public class SendServerConfigurationEntity{/// <summary>/// 邮箱SMTP服务器地址/// </summary>public string SmtpHost { get; set; }/// <summary>/// 邮箱SMTP服务器端口/// </summary>public int SmtpPort { get; set; }/// <summary>/// 是否启用IsSsl/// </summary>public bool IsSsl { get; set; }/// <summary>/// 邮件编码/// </summary>public string MailEncoding { get; set; }/// <summary>/// 邮箱账号/// </summary>public string SenderAccount { get; set; }/// <summary>/// 邮箱密码/// </summary>public string SenderPassword { get; set; }}
}

接收

using MailKit;
using MailKit.Net.Imap;
using MailKit.Search;
using MailKit.Security;
using MimeKit;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CommonTool.MailKit
{/// <summary>/// 跟投邮件服务API/// </summary>public static class ReceiveEmailHelper{/// <summary>/// 设置发件人信息/// </summary>/// <returns></returns>public static SendServerConfigurationEntity SetSendMessage(){var sendServerConfiguration = new SendServerConfigurationEntity{SmtpHost = ConfigurationManager.AppSettings["SmtpServer"],SmtpPort = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]),IsSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["IsSsl"]),MailEncoding = ConfigurationManager.AppSettings["MailEncoding"],SenderAccount = ConfigurationManager.AppSettings["SenderAccount"],SenderPassword = ConfigurationManager.AppSettings["SenderPassword"]};return sendServerConfiguration;}/// <summary>/// 接收邮件/// </summary>public static void ReceiveEmail(){var sendServerConfiguration = SetSendMessage();if (sendServerConfiguration == null){throw new ArgumentNullException();}using (var client = new ImapClient(new ProtocolLogger(MailMessage.CreateMailLog()))){client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,SecureSocketOptions.SslOnConnect);client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);client.Inbox.Open(FolderAccess.ReadOnly);var uids = client.Inbox.Search(SearchQuery.All);foreach (var uid in uids){var message = client.Inbox.GetMessage(uid);message.WriteTo($"{uid}.eml");}client.Disconnect(true);}}/// <summary>/// 下载邮件内容/// </summary>public static void DownloadBodyParts(){var sendServerConfiguration = SetSendMessage();using (var client = new ImapClient()){client.Connect(sendServerConfiguration.SmtpHost, sendServerConfiguration.SmtpPort,SecureSocketOptions.SslOnConnect);client.Authenticate(sendServerConfiguration.SenderAccount, sendServerConfiguration.SenderPassword);client.Inbox.Open(FolderAccess.ReadOnly);// 搜索Subject标题包含“MimeKit”或“MailKit”的邮件var query = SearchQuery.SubjectContains("MimeKit").Or(SearchQuery.SubjectContains("MailKit"));var uids = client.Inbox.Search(query);// 获取搜索结果的摘要信息(我们需要UID和BODYSTRUCTURE每条消息,以便我们可以提取文本正文和附件)var items = client.Inbox.Fetch(uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);foreach (var item in items){// 确定一个目录来保存内容var directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "/MailBody", item.UniqueId.ToString());Directory.CreateDirectory(directory);// IMessageSummary.TextBody是一个便利的属性,可以为我们找到“文本/纯文本”的正文部分var bodyPart = item.TextBody;// 下载'text / plain'正文部分var body = (TextPart)client.Inbox.GetBodyPart(item.UniqueId, bodyPart);// TextPart.Text是一个便利的属性,它解码内容并将结果转换为我们的字符串var text = body.Text;File.WriteAllText(Path.Combine(directory, "body.txt"), text);// 现在遍历所有附件并将其保存到磁盘foreach (var attachment in item.Attachments){// 像我们对内容所做的那样下载附件var entity = client.Inbox.GetBodyPart(item.UniqueId, attachment);// 附件可以是message / rfc822部件或常规MIME部件var messagePart = entity as MessagePart;if (messagePart != null){var rfc822 = messagePart;var path = Path.Combine(directory, attachment.PartSpecifier + ".eml");rfc822.Message.WriteTo(path);}else{var part = (MimePart)entity;// 注意:这可能是空的,但大多数会指定一个文件名var fileName = part.FileName;var path = Path.Combine(directory, fileName);// decode and save the content to a fileusing (var stream = File.Create(path))part.Content.DecodeTo(stream);}}}client.Disconnect(true);}}}
}

MailKit和MimeKit 收发邮件相关推荐

  1. 创建基于MailKit和MimeKit的.NET基础邮件服务

    邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...

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

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

  3. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  4. 马云自嘲只会用电脑收发邮件,网友:马老师的话,听听就行了

    近日,马云的一番言论又引起了众多网友的热议.其在一则采访中自嘲,称自己只会用电脑收发邮件,言论一出,立即在互联网匿名社区炸锅,有网友表示:马老师的话,听听就行了云云. 如下则是另外一些网友的评论:混迹 ...

  5. Exchange 2007更改用户收发邮件大小限制

    Exchange 2007更改用户收发邮件大小限制 exchange 2007更改用户收发邮件大小限制 2009-12-01 MS Exchange 2007默认附件设置为10M,用户通常要修改这些默 ...

  6. Exchange2003中实现两个邮件系统收发邮件配置实例

    在exchange中实验两个exchange邮件系统间收发邮件有两种方式: 1. 配置外部DNS和虚拟服务器,实现邮件系统的收发(可以不是特定). 2. 配置连接器,实现特定两个邮件系统之间的收发. ...

  7. Python收发邮件

    发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...

  8. java中javamail收发邮件实现方法

    概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...

  9. 如何解决安装瑞星后用FoxMail收发邮件速度慢的问题。

        在安装瑞星2008启用监控后,使用FoxMail或其它邮件收发客户端软件进行邮件收发时,会发现:收发邮件的速度都特别慢.开始并不知道是瑞星惹的麻烦,后来发现禁用瑞星的监控后,速度正常!但是,在 ...

最新文章

  1. 【康奈尔大学】机器学习领域读博这段旅程的一些感悟
  2. linux操作系统重启后 解决nginx的pid消失问题
  3. 计算机编程语言python-2018年计算机编程语言排名: Python语言排名第一
  4. 荣耀30s鸿蒙5g,荣耀赵明:荣耀30S将掀起5G手机购买狂潮
  5. 20190812_Intel Realsense D435 关于摄像头USB掉线问题问题记录汇总
  6. 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
  7. 在IDEA中关于项目java版本问题
  8. git add失效问题以及git status结果与github网页结果不一致(转载+自己整理)
  9. ISBN号码【模拟】
  10. 使用Log4jdbc记录JDBC操作
  11. redis集群内部的带宽消耗
  12. java流程控制结构不包括_以下各项中不属于Java语言流程控制结构的是()。
  13. github【如何删除一个repository(仓库)】
  14. 携程App的网络性能优化实践
  15. CSS圆角兼容IE6
  16. 计算理论重点——Theory of Computation
  17. 《指数基金投资指南》读书笔记
  18. 黑马程序员----------Java新特性反射 泛型
  19. 博弈问题总集第三类----Staircase Nim
  20. python-鸢尾花分类

热门文章

  1. 数学建模进入“新课标”,告别了“刷题”“押题”数学应该怎么学?
  2. z中国农产品流通市场运行态势与盈利前景预测报告2022-2027年
  3. 【历史上的今天】3 月 3 日:ATT 成立;全球最大分布式计算项目正式停止;家酿俱乐部首次会议
  4. a view of a leaf Variable that requires grad is being used in an in-place operation.
  5. 2. Golang基本语法
  6. 大学计算机算法程序框图,2019高考真题:算法与程序框图,专题解析
  7. 2020年安全简报(1月)
  8. 任天堂官宣塞尔达传说新作:为新产品护航?
  9. 51nod3241 小明和他的同学们
  10. 入场需知|英利参展|第86届中国国际医疗器械博览会-2022CMEF深圳医疗器械展会