C# 发送email邮件!

利用C#邮件发送邮箱使用到两个类SmtpClient和MailMessage。可以把SmtpClient看做发送邮件信息的客户端,而把MailMessage看做需要发送的消息。

下面是我写的发送邮件的公共方法:

  1  /// <summary>
  2         /// 
  3         /// </summary>
  4         /// <param name="ServerIP">发送邮件服务器ip或者域名</param>
  5         /// <param name="ServerPort">服务器端口</param>
  6         /// <param name="UserName">发件人的账号</param>
  7         /// <param name="Password">发件人的密码</param>
  8         /// <param name="FromAddress">发件人的邮箱地址</param>
  9         /// <param name="FromAddressName">发件人名称</param>
 10         /// <param name="Subject">主题</param>
 11         /// <param name="Body">正文</param>
 12         /// <param name="ToAddressList">收件人集合</param>
 13         /// <param name="CCAddressList">副本收件人集合</param>
 14         /// <param name="BccAddressList">密件抄送收件人集合</param>
 15         /// <param name="IsHtml">正文是否可以使用html标签</param>
 16         /// <param name="AttachMentFileList">附件</param>
 17         /// <param name="MailPriority">发送邮件的优先级 三个选项:低 中 高</param>
 18         /// <returns></returns>
 19         public String SendMail(string ServerIP, int? ServerPort, string UserName, string Password, string FromAddress, string FromAddressName, string Subject, string Body, List<string> ToAddressList, List<string> CCAddressList, List<string> BccAddressList, bool IsHtml, List<AttachmentFile> AttachMentFileList, MailPriority MailPriority)
 20         {
 21             try
 22             {
 23                 if (string.IsNullOrEmpty(ServerIP))
 24                 {
 25                     return "ServerIP 不能为空!";
 26                 }
 27 
 28                 SmtpClient mSmtpClient = new SmtpClient(ServerIP); //申明SmtpClient对象
 29                 System.Net.Mail.MailMessage mMailMessage = new System.Net.Mail.MailMessage(); //申明MailMessage对象
 30 
 31                 if (ServerPort != null)
 32                 {
 33                     mSmtpClient.Port = (int)ServerPort;
 34                 }
 35 
 36                 if (String.IsNullOrEmpty(FromAddress))
 37                 {
 38                     return "发件人不能为空";
 39                 }
 40 
 41                 if (string.IsNullOrEmpty(FromAddressName))
 42                 {
 43                     mMailMessage.From = new MailAddress(FromAddress);
 44                 }
 45                 else
 46                 {
 47                     mMailMessage.From = new MailAddress(FromAddress, FromAddressName);
 48                 }
 49 
 50                 if (string.IsNullOrEmpty(Subject))
 51                 {
 52                     return "主旨不能为空!";
 53                 }
 54 
 55                 if (ToAddressList == null || ToAddressList.Count() == 0)
 56                 {
 57                     return "收件人不能为空!";
 58                 }
 59 
 60                 // mSmtpClient.UseDefaultCredentials = false;
 61                 mSmtpClient.Credentials = new NetworkCredential(UserName, Password); //设置发送人的邮箱账号和密码,163邮箱有设置授权码
 62                 mSmtpClient.EnableSsl = true;  //启用ssl,也就是安全发送
 63 
 64                 foreach (var item in ToAddressList)  //收件者
 65                 {
 66                     mMailMessage.To.Add(item);
 67                 }
 68                 if (CCAddressList != null && CCAddressList.Count() != 0)
 69                 {
 70                     foreach (var item in CCAddressList)  //副本
 71                     {
 72                         mMailMessage.CC.Add(item);
 73                     }
 74                 }
 75 
 76                 if (BccAddressList != null && BccAddressList.Count() != 0)
 77                 {
 78                     foreach (var item in BccAddressList)  //密件抄送人员
 79                     {
 80                         mMailMessage.Bcc.Add(item);
 81                     }
 82                 }
 83 
 84                 mMailMessage.Subject = Subject;
 85                 mMailMessage.IsBodyHtml = IsHtml; //正文是否使用html标签展示
 86                 mMailMessage.Body = Body; //正文
 87                 mMailMessage.BodyEncoding = System.Text.Encoding.UTF8; //正文的编码原则
 88                 mMailMessage.Priority = MailPriority; //优先级
 89 
 90                 if (AttachMentFileList != null && AttachMentFileList.Count() != 0)  //判断是否有附件
 91                 {
 92                     foreach (var item in AttachMentFileList)
 93                     {
 94                         Attachment mAttachment = new Attachment(item.FilePath); //添加文件的文职
 95                         mAttachment.Name = item.FileName;//附件显示的文件名称
 96                         mAttachment.NameEncoding = System.Text.Encoding.UTF8;
 97                         mAttachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
 98                         mAttachment.ContentDisposition.Inline = true;
 99                         mAttachment.ContentDisposition.DispositionType = System.Net.Mime.DispositionTypeNames.Attachment;
100                         mMailMessage.Attachments.Add(mAttachment);
101                     }
102                 }
103 
104                 mSmtpClient.Send(mMailMessage);
105                 return "发送成功!";
106 
107             }
108             catch (Exception ex)
109             {
110                 return ex.Message;
111             }
112         }
113 
114         public string SendMail(String ServerIP, string UserName, string Password, string FromAddress, string FromAddressName, string Subject, string Body, List<string> ToAddressList)
115         {
116             return SendMail(ServerIP, null, UserName, Password, FromAddress, FromAddressName, Subject, Body, ToAddressList, null, null, false, null, MailPriority.Normal);
117         }
118     }
119     public  class AttachmentFile
120     {
121         /// <summary>
122         /// 文件路径
123         /// </summary>
124         public string FilePath { get; set; }
125         /// <summary>
126         ///附件显示的文件明
127         /// </summary>
128         public string FileName { get; set; }
129     }

上面的代码可以直接使用。基本的方法都有,在这儿需要说明下AttachmentFile类是我用于发送文件的时候可以重新命名文件名。

注意:大家在使用的时候注意一下参数UserName和Password,在这儿我以我163的邮箱为例,解释下这两个参数的作用。

 

 在使用163邮箱服务器发送信息时需要按照图片上的操作开启客户端授权密码,上面的UserName和Password就是我们的邮箱地址和授权码。至于QQ邮箱我有试验过,但是就是无法发送邮件,至于你们说的开启POP3和SMTP的选项,我也已经开启了,如果知道一些原因的话,可以在下面留言告诉我!感激!

希望能帮到大家!

 

 

转载于:https://www.cnblogs.com/wujiadexingfu/p/7711527.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUnit 5 –扩展模型

我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在让我们看一下JUnit 5扩展模型&#xff0c;该模型将允许库和框架将自己的实现添加到JUnit中。 总览 设定 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找到您将在此处阅读的更多内容…

软件工程实验5

SA17225400 哪来的妖精 《软件工程&#xff08;C编码实践篇&#xff09;》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 GitHub &#xff1a;https://github.com/littlewulei/Software-Engineering-Lab.git 实验要求&#xff08;参照视频中的具体实验过程&…

纯CSS实现水波纹效果

首先我们从结构和样式两个方面来讲解以上动图的实现过程&#xff1a;Html结构&#xff1a;<div class"square"><span></span><span></span><span></span><div class"content"><h2>Post Title</h…

乡村医生需要什么,看这张图就够了!

乡村医生需要什么&#xff0c;看这张图就够了&#xff01; 笔者最近在重庆市人民政府公开信箱中看到了一位赤脚医生写给政府的公开信&#xff0c;因读后无比感动&#xff0c;索性就摘录了出来&#xff1a; 来信内容&#xff1a; 我们是70-80年代的赤脚医生&#xff0c;是计划生…

java并发任务执行_Java并发性-任务反馈

java并发任务执行从我 上一篇 关于java.util.concurrent包的 文章 的结尾处 摘下来 &#xff0c;这很有趣&#xff0c;有时甚至必须在并发任务启动后从它们那里获得反馈。 例如&#xff0c;假设一个应用程序必须发送电子邮件批处理&#xff0c;除了使用多线程机制外&#xff0c…

Handsfree.js — 一个通过计算机视觉集成手势,面部表情和各种姿势识别的前端库

当电视上出现上图这种科技大片的时候&#xff0c;有没有幻想过有一天可以实现上图的这种交互&#xff0c;当我打开Handsfree这个库的介绍页时&#xff0c;看到前端页面竟然能够识别人的手势&#xff0c;面部以及各种肢体动作&#xff0c;简直刷新了我对前端能力的认知。确信这种…

Python中什么是set

Python中什么是set dict的作用是建立一组 key 和一组 value 的映射关系&#xff0c;dict的key是不能重复的。 有的时候&#xff0c;我们只想要 dict 的 key&#xff0c;不关心 key 对应的 value&#xff0c;目的就是保证这个集合的元素不会重复&#xff0c;这时&#xff0c;set…

SpringBoot:与JOOQ合作

在上一篇文章SpringBoot&#xff1a;与MyBatis一起工作中&#xff0c;我们学习了如何使用SpringBoot MyBatis Starter快速启动并运行Spring和MyBatis。 在本文中&#xff0c;我们将学习如何使用SpringBoot JOOQ Starter。 JOOQ&#xff08;面向Java对象的查询&#xff09;是包…

uni-app使用前的调研和开发心得

背景之前的工时系统是原生的小程序实现&#xff0c;由于产品逻辑需要优化&#xff0c;代码混乱又仅限微信平台使用&#xff0c;公司致力于想给工时系统重构后支持多平台&#xff0c;并对外开放使用&#xff0c;使之成为一款真正的商业产品。经过前期调研后&#xff0c;uni-app对…

EXPORT_SYMBOL使用

EXPORT_SYMBOL只出现在2.6内核中&#xff0c;在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的&#xff0c; 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来&#xff08;因为2.6默认不到处所有的符号&#xff09;。 1、EXPORT_SYMBOL的…

技术人写作和写代码一样重要

也许当你老了会发出这样的感叹“曾经有无数条发财致富的道路摆在我面前&#xff0c;我不知道珍惜&#xff0c;现在老了才追悔莫及”。写技术文章无疑是做技术人工作之外一条很好的知识变现之路。而我也才最近顿悟&#xff0c;下定决心开始在coding的闲暇时间围绕自己的工作和兴…

ejb jsf jpa_完整的WebApplication JSF EJB JPA JAAS –第1部分

ejb jsf jpa这篇文章将是迄今为止我博客中最大的一篇文章&#xff01; 我们将看到完整的Web应用程序。 最新的技术&#xff08;直到今天&#xff09;都将完成&#xff0c;但是我将给出一些提示以显示如何使本文章适应较旧的技术。 在本文的结尾&#xff0c;您将找到要下载的源代…

Jzoj4782 Math

若一个数x是平方数&#xff0c;则d(x)为平方数 所以就是要考虑有多少对i*j为平方数 我们假设&#xff0c;ip*k^2&#xff0c;那么&#xff0c;jp*q^2时&#xff0c;i*j为平方数&#xff08;p不含平方因子&#xff0c;k&#xff0c;q为正整数&#xff09; 所以&#xff0c;我们对…

前端暗黑模式,你了解多少

关于使用越来越多的前端暗黑模式&#xff0c;手机的app或网站都将支持暗黑模式逐渐成为一种规范&#xff0c;这样做的目的是什么呢&#xff1f;从我最初的理解是为了在黑暗的环境下屏幕上阅读的体验考虑&#xff0c;但是看了文摘却有另一种意义。暗黑模式究竟能不能起到省电的作…

两全其美的

使用抽象文档模式的类型安全视图 您如何组织对象&#xff1f; 在本文中&#xff0c;我将介绍一种模式&#xff0c;该模式以无类型的方式在您的系统中组织所谓的名词类&#xff0c;然后使用特征公开数据的类型化视图。 这使得只需少量的牺牲就可以在Java之类的语言中获得JavaScr…

Windows内核函数

字符串处理 在驱动中一般使用的是ANSI字符串和宽字节字符串&#xff0c;在驱动中我们仍然可以使用C中提供的字符串操作函数&#xff0c;但是在DDK中不提倡这样做&#xff0c;由于C函数容易导致缓冲区溢出漏洞&#xff0c;针对字符串的操作它提供了一组函数分别用来处理ANSI字符…

前端应该关注的2021年UI设计趋势

UI设计趋势几乎每年都在发生变化&#xff0c;变化的原因是人们的审美在变导致的&#xff0c;还是设计越来越人性化。市场上是谁在主导设计趋势&#xff1f;其中原因不得而知&#xff0c;我们先看看究竟有哪些变化&#xff1a;1. 3D插图&#xff08;依然流行&#xff09;3D图像将…

如何让你在开发者工具中查看源代码有语法高亮和暗黑主题的效果

如何让你在Chrome浏览器开发者工具中查看源代码的时候&#xff0c;和在代码编辑器中有同样的代码语法高亮的效果&#xff0c;而且还是深色主题&#xff0c;如果你是深色主题的爱好者就更合你意了。国外的美女开发者为你实现了这样功能的浏览器拓展&#xff0c;她的Github主页&a…

Hitting refresh on my career(译)----重新定义我的事业

我是在PlanetXamarin这个网站上&#xff0c;看到的这篇文章&#xff0c;看完后&#xff0c;觉得挺能引起人的思考的,特别是我们广大程序员. "Hit Refresh"这两个单词&#xff0c;字面上理解&#xff1a;点击刷新按钮. 国内有人翻译为"拥抱变革",我觉得“拥…

冒泡排序 快速排序 插入排序 选择排序

最近面试好多公司考察算法&#xff0c;特意整理了一下&#xff1a; 1. 冒泡排序思路分析&#xff1a;在要排序的一组数中&#xff0c;对当前还未排好的序列&#xff0c;从前往后对相邻的两个数依次进行比较和调整&#xff0c;让较大的数往下沉&#xff0c;较小的往上冒。即&…