.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> ...
随机推荐
- mysql 存储过程学习 汇总
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- 配置文件一web.xml
前言 web.xml中标签的加载顺序:<context-param> > <listener> (spring的相关工作) > filter >servlet ...
- xml 单例类
MD5JSON.h #pragma once #include "include/json/json.h" #include "include/md5/md5.h&quo ...
- hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
题意: 给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数.问你能不能分配,如果能,输出具体的分配方案. 题解: 首先,如果1到n之和不能整除k,那么一定不能如题意分 ...
- Pascal 排序算法
Pascal 排序 排序 排序就是将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程.排序问题是一个十分重要的问题,并且排序的方法有很多种: 例子:输入20个数,将它们按照从高到低的次序排 ...
- MongoDB后台运行
文章目录 命令方式(推荐) 命令行和配置文件方式 命令行: 配置文件: 命令方式(推荐) 如果想在后台运行,启动时只需添加 --fork函数即可. fork: 以守护进程的方式运行MongoDB. 指 ...
- day 83 Vue学习之五DIY脚手架、webpack使用、vue-cli的使用、element-ui
Vue学习之五DIY脚手架.webpack使用.vue-cli的使用.element-ui 本节目录 一 vue获取原生DOM的方式 二 DIY脚手架 三 vue-cli脚手架的使用 四 we ...
- Git log和reflog
1.log log命令可以显示所有提交过的版本信息.显示信息如下: Administrator@USER-20171026MG MINGW64 ~/Desktop/lyf (master) $ gi ...
- vue项目实现按需加载的3种方式
vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载.这种方式下一个组件生成一个js文件 用例: { path: '/promisedemo', name: ' ...
- Eclipse 连接MySql数据库总结
Eclipse 连接MySql数据库总结 一.在MySql中创建数据库,并创建表,向表中插入数据 1.创建数据库 create database select_test 2.创建表 create ta ...