因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用~

QQ邮箱发送邮件

#region 发送邮箱try{MailMessage mail = new MailMessage();MailAddress from = new MailAddress("发件人邮箱", "工程管理平台", System.Text.Encoding.GetEncoding("GB2312"));//邮件的发件人mail.From = from;MailAddress to = new MailAddress("收件人邮箱");//设置邮件的收件人
                mail.To.Add(to);mail.Subject = "收款确认";string url = "http://wwww.baidu.com";mail.Body = "您好,有新的待确认收款" + url;mail.IsBodyHtml = true;//HTML格式,内容可以包含HMTL标签和超链接uuu mail.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置邮件的格式mail.Priority = MailPriority.Normal;//设置邮件的发送级别mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;SmtpClient client = new SmtpClient();//邮件发送服务器//client.Port = 25; QQ发送邮件不用设置client.Host = "smtp.qq.com";    //发件人地址所在的服务器SMTP 如网易126邮箱的为smtp.126.comclient.EnableSsl = true;client.UseDefaultCredentials = false; //设置用于 SMTP 事务的端口,默认的是 25client.Credentials = new System.Net.NetworkCredential("发件人邮箱", "授权码");//发件人邮箱登陆名和密码(生成的授权码)client.DeliveryMethod = SmtpDeliveryMethod.Network;try{client.Send(mail);//发送邮件MessageShow("发送成功");Response.Write("<script language='javascript'>alert('发送成功!');</script>");}catch (System.Net.Mail.SmtpException ex){MessageShow(ex.Message);}}catch (Exception ex){throw ex;}#endregion

效果:

注意

重要引用:

using System.Net.Mail;

其中,使用QQ发送邮件,需要使用授权码而不是QQ密码,授权码具体生成方式可以查看:http://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28

自定义发送邮件

附帮助类的发送邮件方式(推荐此种方式,更灵活)

邮件帮助类

  1 #region 邮件帮助类
  2     /// <summary>
  3     /// 邮件帮助类
  4     /// </summary>
  5     public static class SendMailHelper
  6     {
  7         /// <summary>
  8         /// 发送邮件
  9         /// </summary>
 10         /// <param name="request">邮件内容对象</param>
 11         /// <returns>发送邮件所遇到的异常</returns>
 12         public static string SendMail(MailRequest request)
 13         {
 14             try
 15             {
 16                 MailMessage mail = new MailMessage();
 17
 18                 if (string.IsNullOrEmpty(request.From))
 19                 {
 20                     request.From = ConfigurationManager.AppSettings["DefaultMailFrom"];
 21                 }
 22                 mail.From = new MailAddress(request.From);
 23
 24                 PaserMailAddress(request.To, mail.To);
 25                 PaserMailAddress(request.CC, mail.CC);
 26                 PaserMailAddress(request.Bcc, mail.Bcc);
 27
 28                 mail.Subject = request.Subject;
 29                 mail.SubjectEncoding = System.Text.Encoding.UTF8;
 30                 mail.Body = request.Body;
 31                 mail.ReplyTo = new MailAddress(request.From);
 32                 mail.IsBodyHtml = true;
 33
 34                 if (request.Attachments != null && request.Attachments.Length > 0)
 35                 {
 36                     for (int i = 0; i < request.Attachments.Length; i++)
 37                     {
 38                         Attachment mailAttach = new Attachment(ByteArrayToStream(request.Attachments[i].FileData), request.Attachments[i].FileName);
 39
 40                         mail.Attachments.Add(mailAttach);
 41                     }
 42                 }
 43
 44                 if (string.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings["SMTPSERVER_Show"]))
 45                 {
 46                     throw new ApplicationException("邮件服务无效");
 47                 }
 48
 49                 //Smtp Server
 50                 SmtpClient mailClient = new SmtpClient(ConfigurationManager.AppSettings["SMTPSERVER_Show"]);
 51
 52                 if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["SMTPSERVERPORT"]))
 53                 {
 54                     //端口号
 55                     try
 56                     {
 57                         mailClient.Port = Int32.Parse(ConfigurationManager.AppSettings["SMTPSERVERPORT"]);
 58                     }
 59                     catch
 60                     {
 61                         return "SMTP服务器端口设置错误,端口必须设置为数值型";
 62                     }
 63                 }
 64
 65                 if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["MAILUSER_Show"]))
 66                 {
 67                     mailClient.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MAILUSER_Show"], ConfigurationManager.AppSettings["MAILUSERPW_Show"]);
 68                     mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
 69                 }
 70                 else
 71                 {
 72                     mailClient.Credentials = CredentialCache.DefaultNetworkCredentials;
 73                 }
 74
 75                 mailClient.Send(mail);
 76                 mail.Dispose();
 77
 78                 return string.Empty;
 79             }
 80             catch (SmtpFailedRecipientsException e)
 81             {
 82                 return e.Message;
 83             }
 84             catch (SmtpFailedRecipientException e)
 85             {
 86                 return e.Message;
 87             }
 88             catch (SmtpException e)
 89             {
 90                 return e.Message;
 91             }
 92             catch (Exception e)
 93             {
 94                 return e.Message;
 95             }
 96         }
 97
 98         /// <summary>
 99         /// 解析分解邮件地址
100         /// </summary>
101         /// <param name="mailAddress">邮件地址</param>
102         /// <param name="mailCollection">邮件对象</param>
103         private static void PaserMailAddress(string mailAddress, MailAddressCollection mailCollection)
104         {
105             if (string.IsNullOrEmpty(mailAddress))
106             {
107                 return;
108             }
109
110             char[] separator = new char[2] { ',', ';' };
111             string[] addressArray = mailAddress.Split(separator);
112
113             foreach (string address in addressArray)
114             {
115                 if (address.Trim() == string.Empty)
116                 {
117                     continue;
118                 }
119
120                 mailCollection.Add(new MailAddress(address));
121             }
122         }
123
124         /// <summary>
125         /// 字节数组转换为流
126         /// </summary>
127         /// <param name="byteArray">字节数组</param>
128         /// <returns>Stream</returns>
129         private static Stream ByteArrayToStream(byte[] byteArray)
130         {
131             MemoryStream mstream = new MemoryStream(byteArray);
132
133             return mstream;
134         }
135     }
136     #endregion

View Code

补充上述帮助类中,还需要添加 MailRequest.cs 类(发送请求相关类) 和 MailRequestAttachments.cs 类(附件类)

MailRequest.cs 类

using System;
using System.Collections.Generic;
using System.Text;namespace SyncAdData.DBHelper
{/// <summary>/// 发送邮件请求/// </summary>public class MailRequest{#region PrivateFields/// <summary>/// 文件名/// </summary>private string _fromField;/// <summary>/// 返送到/// </summary>private string _toField;/// <summary>/// 抄送/// </summary>private string _copyField;/// <summary>/// 附件/// </summary>private string _bccField;/// <summary>/// 标题/// </summary>private string _subjectField;/// <summary>/// 发送人名/// </summary>private string _bodyField;/// <summary>/// 类容/// </summary>private MailRequestAttachments[] _attachmentsField;#endregion/// <summary>/// 发送人,多个人以分号;间隔/// </summary>public string From{get{return this._fromField;}set{this._fromField = value;}}/// <summary>/// 收件人,多个人以分号;间隔/// </summary>public string To{get{return this._toField;}set{this._toField = value;}}/// <summary>/// 抄送人,多个人以分号;间隔/// </summary>public string CC{get{return this._copyField;}set{this._copyField = value;}}/// <summary>/// 秘密抄送人,多个人以分号;间隔/// </summary>public string Bcc{get{return this._bccField;}set{this._bccField = value;}}/// <summary>/// 主题/// </summary>public string Subject{get{return this._subjectField;}set{this._subjectField = value;}}/// <summary>/// 内容/// </summary>public string Body{get{return this._bodyField;}set{this._bodyField = value;}}/// <summary>/// 附件列表/// </summary>public MailRequestAttachments[] Attachments{get{return this._attachmentsField;}set{this._attachmentsField = value;}}}
}

View Code

MailRequestAttachments.cs 类

using System;
using System.Collections.Generic;
using System.Text;namespace SyncAdData.DBHelper
{/// <summary>/// 发送邮件请求附件/// </summary>public class MailRequestAttachments{#region PrivateFields/// <summary>/// 文件名/// </summary>private string _fileNameField;/// <summary>/// 文件内容/// </summary>private byte[] _fileDataField;#endregion/// <summary>/// 文件名/// </summary>public string FileName{get{return this._fileNameField;}set{this._fileNameField = value;}}/// <summary>/// 文件内容/// </summary>public byte[] FileData{get{return this._fileDataField;}set{this._fileDataField = value;}}}
}

View Code

需要的命名空间

using System;
using System.Reflection;
using System.Net.Mail;
using System.Web.Configuration;
using System.Net;
using System.IO;

其中 帮助类中的服务器地址 和 账号  密码需要在配置文件中配置

 <add key="SMTPSERVER" value="邮件服务器"/><add key="MAILUSER" value="账号"/><add key="MAILUSERPW" value="密码"/>

前台调用

/// <summary>/// 发送邮件/// </summary>/// <param name="StrUrl">根据业务需要,这里我需要传入几个拼接后的id值</param>/// <param name="bid">根据业务需要,这里我传的批次id</param>/// <param name="showemail">根据业务需要,这里我传入的是查询出来的收件人邮箱(如果是固定的更好,可以直接写死或者写成配置文件)</param>private void Send(string StrUrl,string bid,string showemail){ #region 读取配置发送邮件string url = "http://localhost:9998/FinanceManage/CollectionManage/ConfirmCollection_Receipt.aspx?MenuID=14010600&id=" + StrUrl + "&batchID=" + bid + "";string body = "您好,有新的待确认收款≥ "+url;//string bcc = string.Empty;string to = "v-zhangxy52@vanke.com";//收件人//string cc = "";//抄送人MailRequest mail = new MailRequest();mail.Subject = "收款确认";//主题mail.Body = body;//内容// mail.Bcc = bcc;//秘密抄送人mail.From = "v-tangqq02@vanke.com";//发送人mail.To = to; //收件人// mail.CC = cc; //抄送人string sendMainResult = "-1";if (!string.IsNullOrEmpty(mail.To.Trim()) || !string.IsNullOrEmpty(mail.CC.Trim())){sendMainResult = SendMailHelper.SendMail(mail);if (string.IsNullOrEmpty(sendMainResult)){BaseClass.CommFun.Alert(this.up_innerCheck, "发送成功!", Page);}}#endregion }

效果

 点击确定发送之后,查看邮箱,即可看到发送内容(可根据业务需求自行调整)

刚好另一个项目中也需要用到发邮件,也是用的上述的帮助类,附效果图

至此,发送邮件功能已经全部完毕,当中不乏可以优化的地方,欢迎大家自行优化,相互交流~

转载于:https://www.cnblogs.com/zhangxiaoyong/p/6117848.html

C# 多种方式发送邮件(附帮助类)相关推荐

  1. 从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

      退出Activity注册Android遍历 目录(?)[+] 前言 知识结构 具体方案 方案1 方法采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序多activity 方案2 方法通 ...

  2. 从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

    http://blog.csdn.net/vipzjyno1/article/details/25423543 前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来 ...

  3. java发起HTTP 请求的多种方式

    java发起HTTP 请求的多种方式,常用的类为 cn.hutool.http.HttpUtil 但方式有限,需加工,可根据实际情况进行选择 参数多为json格式字符串,先讲几个对象或者转json字符 ...

  4. C++多线程:thread类创建线程的多种方式

    文章目录 描述 函数成员简介 总结 描述 头文件 <thread> 声明方式:std::thread <obj> 简介 线程在构造关联的线程对象时立即开始执行,从提供给作为构造 ...

  5. Rhapsody调用外部类库的多种方式

    Rhapsody调用外部类库的多种方式 声明:转至:Rhapsody调用外部类库的多种方式 随着国内医疗软件行业的发展,医院业务需求日渐复杂,在一些场景下,需要通过集成引擎调用外部程序.这里笔者根据自 ...

  6. Java多种方式读文件,追加文件内容,等对文件的各种操作

    一.多种方式读文件内容.1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 import java.io.BufferedReader;import java. ...

  7. 《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动...

    本节书摘来自异步社区<Android深度探索(卷1):HAL与驱动开发>一书中的第6章,第6.4节使用多种方式测试Linux驱动,作者李宁,更多章节内容可以访问云栖社区"异步社区 ...

  8. Spring学习总结(一)——Spring实现IoC的多种方式

    一.Spring框架概述 Spring是一个开源免费的框架,为了解决企业应用开发的复杂性而创建.Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用.Spring是模块化的,所以可以只使 ...

  9. 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式

    正文共: 3269字 8图 预计阅读时间: 9分钟 每日分享 The great pleasure in life is doing what people say you cannot do. 人生 ...

最新文章

  1. 使用svn控制系统的优缺点和注意事项
  2. python判断两个值是否相等_Python--比较两个字典部分value是否相等
  3. Cowboy 源码分析(一)
  4. bluemix java_Bluemix 基础:将 SQL 数据库添加到您的 Java 应用程序中
  5. leetcode 41. First Missing Positive 1
  6. Atitit .h5文件上传 v3
  7. 【HDOJ】1261 字串数【组合数学--排列+代数】
  8. 【目录】数据结构与算法
  9. Effect Modern c++翻译
  10. iOS内测分发平台的选择与标准
  11. 红色性格和蓝色性格的优缺点
  12. 用nginx的stream转发tcp/udp请求
  13. 为什么谷歌会从零开始构建一个全新的操作系统?
  14. README.txt
  15. Linux驱动开发(一)
  16. C - Factors of Factorial(数学)
  17. 下落的树叶(UVa699紫书p159)
  18. Vue移动端——隐藏滚动条
  19. 自动控制原理《线性系统的时域分析》
  20. 自然语言处理之词嵌入(Word Embedding)

热门文章

  1. C/C++心得-结构体
  2. JavaScript 刷新当前页面
  3. 阿里云@广东:让我们一起上云!
  4. Fedex Ship Manager Software安装
  5. QTP的那些事--操作excel的函数
  6. iOS开发-Get请求,Post请求,同步请求和异步请求
  7. 参加第三届信息化创新克拉玛依国际学术论坛
  8. Linux内核源代码分析-目录
  9. 快速完成和读懂测试计划
  10. 回车 触发 提交事件