.Net Email操作类
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操作类相关推荐
- Lion的发送E-mail的类
Lion的发送E-mail的类 using System; using System.Text; using System.IO; using System.Net; using System.Net ...
- php dimage加上域名,PHP全功能无变形图片裁剪操作类与用法示例
本文实例讲述了PHP全功能无变形图片裁剪操作类与用法.分享给大家供大家参考,具体如下: 如果需要图片裁剪,或生成缩略图,这个基本上没有问题,全部需要的功能都在里面,全部都是无变形的. 这里我们划分为四 ...
- asp.net很有用的字符串操作类
using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...
- php加数据库开发案例,PHP简单数据库操作类实例【支持增删改查及链式操作】
本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类 ...
- php 有趣的php 封装,封装PHP常用的操作类
/** * ****************************************** * 数据库操作类(mysql)版本 * * @author mark.wang * @date 200 ...
- Java学习总结:41(文件操作类:File)
Java文件操作类:File 在java.io包中,如果要进行文件自身的操作(例如:创建.删除等),只能依靠java.io.File类完成. File类的常用操作方法 No. 方法 类型 描述 1 p ...
- Java学习总结:35(数字操作类)
Java的数字操作类 一.Math类 Math类是一个专门用来进行数学计算的操作类,它提供了一系列的数学计算方法.在Math类里面提供的一切方法都是static型方法,所以可以直接由类名称进行调用. ...
- classlist使用方法_如何通过使用HTML5的classList API在没有jQuery的情况下操作类
classlist使用方法 by Ayo Isaiah 通过Ayo Isaiah 如何通过使用HTML5的classList API在没有jQuery的情况下操作类 (How to manipulat ...
- python mysql类里_Python MySql 操作类
# -*- coding:utf-8 -*- import MySQLdb import time ''' · MySQL 操作类 · V1.0 ''' class MySQLClass(object ...
- java内省操作类的属性
java内省操作类的属性 1.取得指定类的属性的方法 2.操作指定类的属性的方法 3.得到指定类的属性数据类型的方法 package com.ma.introspector;import java.b ...
最新文章
- flask_socketio 用法:
- 关于linux内核模块的装载过程
- 最简单的jQuery程序
- Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
- 心态很容易受别人影响_女人生宝宝也看年龄?这3个影响生育能力的因素,你得了解清楚...
- python简单命令语句_Python语言----linux常用命令(13)
- Debian For ARM Webmin Server
- 限时福利:入群锁定大会直播+PPT,听百位 AI 技术大咖、20 大热门主题分享!...
- web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测
- 【SDOI2014】数表
- elasticsearch设置_search的size
- 计算机网络 IP:ABC类地址与 子网掩码(ABC类网络均有属于自己的私有IP段 节省32位IP资源 ) 网络地址 主机地址 子网 与子网掩码之间的关系换算 IP和子网掩码相互依存
- TS中ts和.d.ts文件的区别
- 响铃:360浏览器首创自有根证书,不赚钱为哪般?
- 删除页面引入的js或者css文件
- Qt 使用阿里巴巴字体图标库 iconfont
- 《哲学史讲演录》——思辨节选---芝诺(一)
- 华为OD机试 - 新员工座位安排系统(Python) | 机试题算法思路
- 深入 JavaScript 高级语法
- 基于微信小程序的图书馆选座系统源码
热门文章
- ArcGIS.Server.9.2.DotNet实现EditorTask功能扩展(自带例子 十、三)
- 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景... 1
- 基于图灵api的Python机器人
- 机器学习:LibSVM与weka在eclipse中的使用
- 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
- [LeetCode]题解(python):016-3Sum Closest
- 打开带图片的EXCEL文档反应慢 案例解析
- 七种场景下的软件作业量估计
- JavaScript JSON.stringify()
- 14.PHP vld 扩展