.Net Email操作类
using System;
using System.Text;
using System.Net.Mail;
using System.Net;
using System.Linq;
using System.Text.RegularExpressions; namespace Dos.ORM.Common.Helpers
{
/// <summary>
/// 发送邮件帮助类
/// </summary>
public class EmailHelper
{ private readonly SmtpClient _smtp = new SmtpClient();
private Encoding Encoding { get; set; }
private bool IsHtml { get; set; }
private string[] Cc { get; set; }
private string[] Bcc { get; set; } /// <summary>
/// 是否为腾讯企业邮箱
/// </summary>
private readonly bool _isExmailQq; /// <summary>
/// 发件邮箱密码或授权码
/// </summary>
private string Password { get; set; } /// <summary>
/// 获取发送结果,成功则为空
/// </summary>
public string Result { get; private set; } /// <summary>
/// 设置邮件编码类型
/// </summary>
/// <param name="contentEncoding"></param>
public void SetEncoding(Encoding contentEncoding)
{
Encoding = contentEncoding; }
/// <summary>
///设置邮件正文是否为 Html 格式
/// </summary>
/// <param name="isHtml"></param>
public void SetIsHtml(bool isHtml)
{
IsHtml = isHtml;
}
/// <summary>
/// 抄送
/// </summary>
/// <param name="cc"></param>
public void SetCc(params string[] cc)
{
Cc = cc;
} /// <summary>
/// 暗送
/// </summary>
/// <param name="bc"></param>
public void SetBc(params string[] bc)
{
Bcc = bc;
}
/// <summary>
/// 是否ssl加密
/// </summary>
/// <param name="isSsl"></param>
public void SetIsSsl(bool isSsl)
{
_smtp.EnableSsl = isSsl;
} /// <summary>
/// 构造函数
/// </summary>
/// <param name="host">SMTP事务的主机的名称或IP地址</param>
/// <param name="sendUserAccName">发件人邮件账号名称(不包含@及后缀)</param>
/// <param name="sendUserPwd">发件人邮箱密码</param>
/// <param name="isExmailQq">是否为腾讯企业邮箱</param>
/// <param name="port">端口号,默认为25</param>
public EmailHelper(string host, string sendUserAccName, string sendUserPwd, bool isExmailQq = false, int port = )
{
_smtp.Host = host;
Password = sendUserPwd;
_isExmailQq = isExmailQq;
_smtp.Port = port != ? port : 0x19;
_smtp.EnableSsl = false; IsHtml = true;
Encoding = Encoding.UTF8; if (string.IsNullOrEmpty(sendUserAccName) || string.IsNullOrEmpty(sendUserPwd))
{
_smtp.UseDefaultCredentials = false;
}
else
{
_smtp.Credentials = new NetworkCredential(sendUserAccName, sendUserPwd);
}
} /// <summary>
/// 发送邮件
/// </summary>
/// <param name="fromAcc">发件人邮件地址</param>
/// <param name="fromUserNickname">发件人显示名称</param>
/// <param name="toUserAcc">收件人地址</param>
/// <param name="title">邮件标题</param>
/// <param name="body">邮件正文</param>
/// <param name="file">附件地址数组</param>
/// <returns>bool 是否成功 </returns>
public bool Send(string fromAcc, string fromUserNickname, string toUserAcc, string title, string body, params string[] file)
{
return Send(fromAcc, fromUserNickname, new string[] { toUserAcc }, title, body, file);
} /// <summary>
/// 发送邮件
/// </summary>
/// <param name="fromAcc">发件人邮件地址</param>
/// <param name="fromUserNickname">发件人显示名称</param>
/// <param name="toUserAcc">收件人地址</param>
/// <param name="title">邮件标题</param>
/// <param name="body">邮件正文</param>
/// <param name="file">附件地址数组</param>
/// <returns>bool 是否成功 </returns>
public bool Send(string fromAcc, string fromUserNickname, string[] toUserAcc, string title, string body, params string[] file)
{
string mailReg = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
if (toUserAcc == null)
{
throw new ArgumentNullException("EmailHelper.Send.to");
} if (toUserAcc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
{
Result = "收件人地址不合法";
return false;
}
if (Bcc != null && Bcc.Length > )
{
if (Bcc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
{
Result = "暗送人地址不合法";
return false;
}
}
if (Cc != null && Cc.Length > )
{
if (Cc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
{
Result = "抄送人地址不合法";
return false;
}
} if (_isExmailQq)
{
#region 检查是否为腾讯企业邮箱(注意这里有一个坑,腾旭企业邮箱需要单独进行以下设置)
//此坑可参见:https://www.cnblogs.com/gxivwshjj/p/7562311.html var mail = new System.Web.Mail.MailMessage();
try
{
mail.To = string.Join(";", toUserAcc);
mail.From = fromAcc;
mail.Subject = title;
mail.BodyFormat = System.Web.Mail.MailFormat.Html;
mail.Body = body; //设置基础身份验证为1
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "");
//设置发件邮箱地址
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", fromAcc);
//设置发件邮箱密码
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Password);
//设置端口号为465
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", );
//设置SSL为true
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true"); //发送邮件的附件
foreach (var r in file)
{
var objMailAttachment = new Attachment(r);
mail.Attachments.Add(objMailAttachment);
} System.Web.Mail.SmtpMail.SmtpServer = _smtp.Host;
System.Web.Mail.SmtpMail.Send(mail); return true;
}
catch (Exception ex)
{
Result = ex.Message;
} #endregion
}
else
{
MailMessage message = new MailMessage(); //创建一个附件对象
foreach (var r in file)
{
//发送邮件的附件
var objMailAttachment = new Attachment(r);
message.Attachments.Add(objMailAttachment);
}
message.From = new MailAddress(fromAcc, fromUserNickname);
message.Subject = title;
message.SubjectEncoding = Encoding;
message.Body = body;
message.BodyEncoding = Encoding;
message.IsBodyHtml = IsHtml;
message.Priority = MailPriority.Normal;
foreach (string str in toUserAcc)
{
message.To.Add(str);
}
if (Bcc != null && Bcc.Length > )
{
foreach (string b in Bcc)
{
message.Bcc.Add(b);
}
}
if (Cc != null && Cc.Length > )
{
foreach (string c in Cc)
{
message.CC.Add(c);
}
} try
{
_smtp.Send(message);
return true;
}
catch (Exception ex)
{
Result = ex.Message;
}
} return false;
}
}
}
.Net Email操作类的更多相关文章
- C# 字符串操作类
using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...
- [C#]exchange发送,收件箱操作类
最近项目中需要用到exchange的操作,就参照msdn弄了一个简单的操作类.目前先实现了,发送邮件和拉取收件箱的功能,其他的以后在慢慢的添加. using Microsoft.Exchange.We ...
- ecshop数据库操作类
ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现. 好处:实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小. 当网站需要做me ...
- ECShop - 数据库操作类
ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站 ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- FTP操作类的使用
FTP(文件传输协议) FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- JQuery操作类数组的工具方法
JQuery学习之操作类数组的工具方法 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$('div')将返回div里面的所有div元素包装的JQuery对象.在这中情况 ...
- Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)
今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> ...
随机推荐
- sql count 函数用法
count(*) 会查询所有记录数,,包括为null值的数据: count(column)不会包含 column值为null的情况: count(1) 和 count(*)相同,,不同的是,,mysq ...
- Java Collection - 遍历map的几种方式
作者:zhaoguhong(赵孤鸿) 出处:http://www.cnblogs.com/zhaoguhong/ 本文版权归作者和博客园共有,转载请注明出处 ---------------- 总结 如 ...
- 【JZOJ6274】梦境
description analysis 其实可以贪心 先把区间按左端点排序,转折点也排序 扫一次转折点,把所有左端点在当前点左边的区间丢进优先队列里 按照贪心策略,对于某个转折点,一定选择右端点离它 ...
- oracle 删除掉重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 .查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- docker-compose安装及docker-compose.yml详解
1.下载安装 [root@cx-- ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-comp ...
- P2763 试题库问题 (网络流 最大流)
传送门 解题思路 比较简单的网络流,建图还是比较好想的.让源点向试题连流量为1的边,试题向所属类型连流量为1的边,类型向汇点连流量为需要此类试题的边.直接跑最大流,输出答案时找到那些满流的边所对的点. ...
- HDU 6064 RXD and numbers
传送门 有向图生成树计数 (度数 ->入度->外向树) BEST定理 (不定起点的欧拉回路个数=某点为根的外向树个数(存在欧拉回路->每个点为根的外向树个数相等)*(每个点的度数(存 ...
- 自签https证书2(适配新版chrome,不会显示“不安全”)
上一篇博文中介绍了自签https的方法,但是在新版的chrome中会出现这么一个问题:自签ca可以识别,但是证书仍然会判断不安全.为了解决这个问题,博主特地又查了好多资料,终于找到了解决方案. 当然, ...
- QT之QSettings 学习
1.读写配置文件. 代码如下: //创建配置文件 QSettings iniFile(QCoreApplication::applicationDirPath()+"/test.ini&qu ...
- 猥琐发育,3月份Java干货已到达战场!
时间真的过得很快,又是月底了,又到了我们总结这个月干货的时候了.3月份这个月我们都带来了哪些干货呢?我们一起回顾一下. 坑爹,手机端链接点不开,请切换到电脑端或者关注我们的微信公众号进行阅读. 扫描关 ...