1 using System;2 using System.Text;3 using System.Net.Mail;4 using System.Net;5 using System.Linq;6 using System.Text.RegularExpressions;7 8 namespace Dos.ORM.Common.Helpers9 {10     /// <summary>11     /// 发送邮件帮助类12     /// </summary>13     public class EmailHelper14     {15 16         private readonly SmtpClient _smtp = new SmtpClient();17         private Encoding Encoding { get; set; }18         private bool IsHtml { get; set; }19         private string[] Cc { get; set; }20         private string[] Bcc { get; set; }21 22         /// <summary>23         /// 是否为腾讯企业邮箱24         /// </summary>25         private readonly bool _isExmailQq;26 27         /// <summary>28         /// 发件邮箱密码或授权码29         /// </summary>30         private string Password { get; set; }31 32         /// <summary>33         /// 获取发送结果,成功则为空34         /// </summary>35         public string Result { get; private set; }36 37         /// <summary>38         /// 设置邮件编码类型39         /// </summary>40         /// <param name="contentEncoding"></param>41         public void SetEncoding(Encoding contentEncoding)42         {43             Encoding = contentEncoding;44 45         }46         /// <summary>47         ///设置邮件正文是否为 Html 格式 48         /// </summary>49         /// <param name="isHtml"></param>50         public void SetIsHtml(bool isHtml)51         {52             IsHtml = isHtml;53         }54         /// <summary>55         /// 抄送56         /// </summary>57         /// <param name="cc"></param>58         public void SetCc(params string[] cc)59         {60             Cc = cc;61         }62 63         /// <summary>64         /// 暗送65         /// </summary>66         /// <param name="bc"></param>67         public void SetBc(params string[] bc)68         {69             Bcc = bc;70         }71         /// <summary>72         /// 是否ssl加密73         /// </summary>74         /// <param name="isSsl"></param>75         public void SetIsSsl(bool isSsl)76         {77             _smtp.EnableSsl = isSsl;78         }79 80         /// <summary>81         /// 构造函数82         /// </summary>83         /// <param name="host">SMTP事务的主机的名称或IP地址</param>84         /// <param name="sendUserAccName">发件人邮件账号名称(不包含@及后缀)</param>85         /// <param name="sendUserPwd">发件人邮箱密码</param>86         /// <param name="isExmailQq">是否为腾讯企业邮箱</param>87         /// <param name="port">端口号,默认为25</param>88         public EmailHelper(string host, string sendUserAccName, string sendUserPwd, bool isExmailQq = false, int port = 25)89         {90             _smtp.Host = host;91             Password = sendUserPwd;92             _isExmailQq = isExmailQq;93             _smtp.Port = port != 25 ? port : 0x19;94             _smtp.EnableSsl = false;95 96             IsHtml = true;97             Encoding = Encoding.UTF8;98 99             if (string.IsNullOrEmpty(sendUserAccName) || string.IsNullOrEmpty(sendUserPwd))
100             {
101                 _smtp.UseDefaultCredentials = false;
102             }
103             else
104             {
105                 _smtp.Credentials = new NetworkCredential(sendUserAccName, sendUserPwd);
106             }
107         }
108
109         /// <summary>
110         /// 发送邮件
111         /// </summary>
112         /// <param name="fromAcc">发件人邮件地址</param>
113         /// <param name="fromUserNickname">发件人显示名称</param>
114         /// <param name="toUserAcc">收件人地址</param>
115         /// <param name="title">邮件标题</param>
116         /// <param name="body">邮件正文</param>
117         /// <param name="file">附件地址数组</param>
118         /// <returns>bool 是否成功 </returns>
119         public bool Send(string fromAcc, string fromUserNickname, string toUserAcc, string title, string body, params string[] file)
120         {
121             return Send(fromAcc, fromUserNickname, new string[] { toUserAcc }, title, body, file);
122         }
123
124         /// <summary>
125         /// 发送邮件
126         /// </summary>
127         /// <param name="fromAcc">发件人邮件地址</param>
128         /// <param name="fromUserNickname">发件人显示名称</param>
129         /// <param name="toUserAcc">收件人地址</param>
130         /// <param name="title">邮件标题</param>
131         /// <param name="body">邮件正文</param>
132         /// <param name="file">附件地址数组</param>
133         /// <returns>bool 是否成功 </returns>
134         public bool Send(string fromAcc, string fromUserNickname, string[] toUserAcc, string title, string body, params string[] file)
135         {
136             string mailReg = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
137             if (toUserAcc == null)
138             {
139                 throw new ArgumentNullException("EmailHelper.Send.to");
140             }
141
142             if (toUserAcc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
143             {
144                 Result = "收件人地址不合法";
145                 return false;
146             }
147             if (Bcc != null && Bcc.Length > 0)
148             {
149                 if (Bcc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
150                 {
151                     Result = "暗送人地址不合法";
152                     return false;
153                 }
154             }
155             if (Cc != null && Cc.Length > 0)
156             {
157                 if (Cc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
158                 {
159                     Result = "抄送人地址不合法";
160                     return false;
161                 }
162             }
163
164             if (_isExmailQq)
165             {
166                 #region 检查是否为腾讯企业邮箱(注意这里有一个坑,腾旭企业邮箱需要单独进行以下设置)
167                 //此坑可参见:https://www.cnblogs.com/gxivwshjj/p/7562311.html
168
169                 var mail = new System.Web.Mail.MailMessage();
170                 try
171                 {
172                     mail.To = string.Join(";", toUserAcc);
173                     mail.From = fromAcc;
174                     mail.Subject = title;
175                     mail.BodyFormat = System.Web.Mail.MailFormat.Html;
176                     mail.Body = body;
177
178                     //设置基础身份验证为1
179                     mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
180                     //设置发件邮箱地址
181                     mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", fromAcc);
182                     //设置发件邮箱密码
183                     mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Password);
184                     //设置端口号为465
185                     mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);
186                     //设置SSL为true
187                     mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
188
189                     //发送邮件的附件
190                     foreach (var r in file)
191                     {
192                         var objMailAttachment = new Attachment(r);
193                         mail.Attachments.Add(objMailAttachment);
194                     }
195
196                     System.Web.Mail.SmtpMail.SmtpServer = _smtp.Host;
197                     System.Web.Mail.SmtpMail.Send(mail);
198
199                     return true;
200                 }
201                 catch (Exception ex)
202                 {
203                     Result = ex.Message;
204                 }
205
206                 #endregion
207             }
208             else
209             {
210                 MailMessage message = new MailMessage();
211
212                 //创建一个附件对象
213                 foreach (var r in file)
214                 {
215                     //发送邮件的附件
216                     var objMailAttachment = new Attachment(r);
217                     message.Attachments.Add(objMailAttachment);
218                 }
219                 message.From = new MailAddress(fromAcc, fromUserNickname);
220                 message.Subject = title;
221                 message.SubjectEncoding = Encoding;
222                 message.Body = body;
223                 message.BodyEncoding = Encoding;
224                 message.IsBodyHtml = IsHtml;
225                 message.Priority = MailPriority.Normal;
226                 foreach (string str in toUserAcc)
227                 {
228                     message.To.Add(str);
229                 }
230                 if (Bcc != null && Bcc.Length > 0)
231                 {
232                     foreach (string b in Bcc)
233                     {
234                         message.Bcc.Add(b);
235                     }
236                 }
237                 if (Cc != null && Cc.Length > 0)
238                 {
239                     foreach (string c in Cc)
240                     {
241                         message.CC.Add(c);
242                     }
243                 }
244
245                 try
246                 {
247                     _smtp.Send(message);
248                     return true;
249                 }
250                 catch (Exception ex)
251                 {
252                     Result = ex.Message;
253                 }
254             }
255
256             return false;
257         }
258     }
259 }

.Net Email操作类相关推荐

  1. Lion的发送E-mail的类

    Lion的发送E-mail的类 using System; using System.Text; using System.IO; using System.Net; using System.Net ...

  2. php dimage加上域名,PHP全功能无变形图片裁剪操作类与用法示例

    本文实例讲述了PHP全功能无变形图片裁剪操作类与用法.分享给大家供大家参考,具体如下: 如果需要图片裁剪,或生成缩略图,这个基本上没有问题,全部需要的功能都在里面,全部都是无变形的. 这里我们划分为四 ...

  3. asp.net很有用的字符串操作类

    using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...

  4. php加数据库开发案例,PHP简单数据库操作类实例【支持增删改查及链式操作】

    本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类 ...

  5. php 有趣的php 封装,封装PHP常用的操作类

    /** * ****************************************** * 数据库操作类(mysql)版本 * * @author mark.wang * @date 200 ...

  6. Java学习总结:41(文件操作类:File)

    Java文件操作类:File 在java.io包中,如果要进行文件自身的操作(例如:创建.删除等),只能依靠java.io.File类完成. File类的常用操作方法 No. 方法 类型 描述 1 p ...

  7. Java学习总结:35(数字操作类)

    Java的数字操作类 一.Math类 Math类是一个专门用来进行数学计算的操作类,它提供了一系列的数学计算方法.在Math类里面提供的一切方法都是static型方法,所以可以直接由类名称进行调用. ...

  8. classlist使用方法_如何通过使用HTML5的classList API在没有jQuery的情况下操作类

    classlist使用方法 by Ayo Isaiah 通过Ayo Isaiah 如何通过使用HTML5的classList API在没有jQuery的情况下操作类 (How to manipulat ...

  9. python mysql类里_Python MySql 操作类

    # -*- coding:utf-8 -*- import MySQLdb import time ''' · MySQL 操作类 · V1.0 ''' class MySQLClass(object ...

  10. java内省操作类的属性

    java内省操作类的属性 1.取得指定类的属性的方法 2.操作指定类的属性的方法 3.得到指定类的属性数据类型的方法 package com.ma.introspector;import java.b ...

最新文章

  1. flask_socketio 用法:
  2. 关于linux内核模块的装载过程
  3. 最简单的jQuery程序
  4. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
  5. 心态很容易受别人影响_女人生宝宝也看年龄?这3个影响生育能力的因素,你得了解清楚...
  6. python简单命令语句_Python语言----linux常用命令(13)
  7. Debian For ARM Webmin Server
  8. 限时福利:入群锁定大会直播+PPT,听百位 AI 技术大咖、20 大热门主题分享!...
  9. web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测
  10. 【SDOI2014】数表
  11. elasticsearch设置_search的size
  12. 计算机网络 IP:ABC类地址与 子网掩码(ABC类网络均有属于自己的私有IP段 节省32位IP资源 ) 网络地址 主机地址 子网 与子网掩码之间的关系换算 IP和子网掩码相互依存
  13. TS中ts和.d.ts文件的区别
  14. 响铃:360浏览器首创自有根证书,不赚钱为哪般?
  15. 删除页面引入的js或者css文件
  16. Qt 使用阿里巴巴字体图标库 iconfont
  17. 《哲学史讲演录》——思辨节选---芝诺(一)
  18. 华为OD机试 - 新员工座位安排系统(Python) | 机试题算法思路
  19. 深入 JavaScript 高级语法
  20. 基于微信小程序的图书馆选座系统源码

热门文章

  1. ArcGIS.Server.9.2.DotNet实现EditorTask功能扩展(自带例子 十、三)
  2. 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景... 1
  3. 基于图灵api的Python机器人
  4. 机器学习:LibSVM与weka在eclipse中的使用
  5. 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
  6. [LeetCode]题解(python):016-3Sum Closest
  7. 打开带图片的EXCEL文档反应慢 案例解析
  8. 七种场景下的软件作业量估计
  9. JavaScript JSON.stringify()
  10. 14.PHP vld 扩展