.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> ...
随机推荐
- Batch - C:\Progra~1是什么意思
就是那种DOS下的8.3的规范,可以这样写 C:\Progra~1也可以这样写全名字的 "C:\Program File",因为这个路径中的文件夹名有空格,要用两个英文输入法下的双 ...
- c++ strlen() 函数
{ char *buf = new char[1024]; ZeroMemory(buf,1024) for(int i = 0; i < 1023; i++) { buf[i] = '5'; ...
- Windows mkdir
创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKDIR 会在路径中创建中级目录.例如: 假设 \a 不存在, ...
- SpringBoot使用拦截器/ Servlet/ Filter
一.SpringBoot中使用拦截器 使用SpringMVC的拦截器,需要定义好拦截器,然后通过配置文件文件,对其进行注册 而在SpringBoot项目中,之前在配置文件中配置的内容,现在体现在一个类 ...
- DNS的解析过程
1.什么是DNS 在互联网上,唯一标识一台计算机的是IP地址,但是IP地址不方便记忆,通过一个域名对应一个IP地址,来达到找到IP地址的目的,那么DNS就是将域名转换成IP地址的过程. 2.DNS查询 ...
- Mac+VS Code+Git+Github
https://blog.csdn.net/qq_37747262/article/details/81750417
- 解决div设置浮动,高度消失
给包围 浮动的层 加清除浮动样式,样式要兼容的用下面的代码.clearfix {*zoom:1; clear:both;}.clearfix:after{content:".";d ...
- POJ 1743-POJ - 3261~后缀数组关于最长字串问题
POJ 1743 题意: 有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1~~88范围内的整数,现在要找一个重复的主题.“主题”是整个音符序列的一个子串,它需 ...
- Redis单机和集群配置(版本在5.0后)
摘抄并用于自己后查 单机版的配置: 1. 下载redis压缩包,然后解压缩文件(tar xzf): 2. 进入解压后的redis文件目录,编译redis源文件(make,没有c环境要gcc): 3. ...
- R语言进行广州租房可视化
又到了一年一度的换租房的季节,在广州,想要找到一处好一点的租房真心不容易,不是采光不好,就是价格太贵,怎么才能找到合适自己的房子呢?于是我利用“造数”这个虫工具爬取了安居客网的广州租房的数据,通过分析 ...