#region 邮件帮助类
//+-------------------------------------------------------------------+
//+ FileName: MailHelper.cs
//+ File Created: 2016-9-12
//+-------------------------------------------------------------------+
//+ Purpose: 邮件帮助类
//+-------------------------------------------------------------------+
//+-------------------------------------------------------------------+
//+ UpdateHistory: 修改的内容
//+-------------------------------------------------------------------+
/// <summary>
/// 邮件帮助类
/// </summary>
public static class SendMailHelper
{
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="request">邮件内容对象</param>
/// <returns>发送邮件所遇到的异常</returns>
public static string SendMail(MailRequest request)
{
try
{
MailMessage mail = new MailMessage(); if (string.IsNullOrEmpty(request.From))
{
request.From = WebConfigurationManager.AppSettings["DefaultMailFrom"];
}
mail.From = new MailAddress(request.From); PaserMailAddress(request.To, mail.To);
PaserMailAddress(request.CC, mail.CC);
PaserMailAddress(request.Bcc, mail.Bcc); mail.Subject = request.Subject;
mail.SubjectEncoding = System.Text.Encoding.UTF8;
mail.Body = request.Body;
mail.ReplyTo = new MailAddress(request.From);
mail.IsBodyHtml = true; if (request.Attachments != null && request.Attachments.Length > 0)
{
for (int i = 0; i < request.Attachments.Length; i++)
{
Attachment mailAttach = new Attachment(ByteArrayToStream(request.Attachments[i].FileData), request.Attachments[i].FileName); mail.Attachments.Add(mailAttach);
}
} if (string.IsNullOrEmpty(WebConfigurationManager.AppSettings["SMTPSERVER"]))
{
throw new ApplicationException("邮件服务无效");
} //Smtp Server
SmtpClient mailClient = new SmtpClient(WebConfigurationManager.AppSettings["SMTPSERVER"]); if (!string.IsNullOrEmpty(WebConfigurationManager.AppSettings["SMTPSERVERPORT"]))
{
//端口号
try
{
mailClient.Port = Int32.Parse(WebConfigurationManager.AppSettings["SMTPSERVERPORT"]);
}
catch
{
return "SMTP服务器端口设置错误,端口必须设置为数值型";
}
} if (!string.IsNullOrEmpty(WebConfigurationManager.AppSettings["MAILUSER"]))
{
mailClient.Credentials = new System.Net.NetworkCredential(WebConfigurationManager.AppSettings["MAILUSER"], WebConfigurationManager.AppSettings["MAILUSERPW"]);
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
}
else
{
mailClient.Credentials = CredentialCache.DefaultNetworkCredentials;
} mailClient.Send(mail);
mail.Dispose(); return string.Empty;
}
catch (SmtpFailedRecipientsException e)
{
Logger.Write("无法发送邮件到所有邮件地址");
Logger.Write(e); return e.Message;
}
catch (SmtpFailedRecipientException e)
{
Logger.Write("无法发送邮件到个别邮件地址");
Logger.Write(e); return e.Message;
}
catch (SmtpException e)
{
Logger.Write("发送邮件时的Smtp异常");
Logger.Write(e); return e.Message;
}
catch (Exception e)
{
Logger.Write("发送邮件时的异常");
Logger.Write(e); return e.Message;
}
} /// <summary>
/// 解析分解邮件地址
/// </summary>
/// <param name="mailAddress">邮件地址</param>
/// <param name="mailCollection">邮件对象</param>
private static void PaserMailAddress(string mailAddress, MailAddressCollection mailCollection)
{
if (string.IsNullOrEmpty(mailAddress))
{
return;
} char[] separator = new char[2] { ',', ';' };
string[] addressArray = mailAddress.Split(separator); foreach (string address in addressArray)
{
if (address.Trim() == string.Empty)
{
continue;
} mailCollection.Add(new MailAddress(address));
}
} /// <summary>
/// 字节数组转换为流
/// </summary>
/// <param name="byteArray">字节数组</param>
/// <returns>Stream</returns>
private static Stream ByteArrayToStream(byte[] byteArray)
{
MemoryStream mstream = new MemoryStream(byteArray); return mstream;
}
}
#endregion
需要引入命名空间
using System;
using System.Reflection;
using System.Net.Mail;
using System.Web.Configuration;
using System.Net;
using System.IO;
其中 帮助类中的服务器地址 和 账号 密码需要在配置文件中配置
<add key="SMTPSERVER" value="邮件服务器"/>
<add key="MAILUSER" value="账号"/>
<add key="MAILUSERPW" value="密码"/>
email的更多相关文章
- 如何在网页中提取Email地址
开博好久了,今天第一次发表技术文档,之前总是将一些好的事例保存在电脑,时间久了找起来也很麻烦,所以还是放在博客里进行归类比较方便,这样也能将自己在学习过程中的一些心得体会分享给大家,也能给需要的人一点 ...
- 系统中没有邮件客户端设置autoLink=email会挂掉的问题
TextView的autoLink属性为我们提供了很大的便利性,当文本中有网址,邮箱或电话的时候可以让我们方便地执行打电话发邮件等动作,不过也有一些问题,比如说设置autoLink包含email属性, ...
- Email系列(QQ邮箱 + 含附件的邮箱案例 + 项目实战)
平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html 邮箱系列:https://github.com/duniti ...
- 应用层之E-mail服务及javaMail邮件发送的知识总结
关于Email服务你需要知道的知识点: 概述: 今天来介绍一下应用层的电子邮件服务,我们每天几乎都在用,电子邮件(email)服务也是一种基于C/S模式的服务,它采用的是一种"存储-转发&q ...
- 2.C#WinForm基础Email分析器
功能:输入Email地址,输出用户名和域名 string[] String.split(params char[] separator)(+5重载)) 返回的字符串数组包含此实例的字符串(由指定Uni ...
- SSIS 实例——将SQL获取的信息传递到Email中
最近在为公司财务开发一个邮件通知时遇到了一个技术问题.原来我设计SSIS的是每天将ERP系统支付数据导出到财务支付平台后 Email 通知财务,然后财务到支付平台上进行支付操作.由于那个时候开发时间很 ...
- java发送 email
public class EmailUtils implements IAction { private static Logger logger = Logger.getLogger(EmailUt ...
- 使用QQ邮箱发送email(Python)
实际开发过程中使用到邮箱的概率很高,那么如何借助python使用qq邮箱发送邮件呢? 代码很简单,短短几行代码就可以实现这个功能. 使用到的模块有smtplib和email这个两个模块,关于这两个模块 ...
- 《精通正则表达式》笔记 --- “验证”Email格式
写一个正则表达式的三个步骤: 理解需求并找出你需要验证的数据的特征: 写一个还可以用的正则表达式: 看看能不能达到你的目的,同时想想会不会匹配到一些不想要的数据: [可选]性能优化 我觉得写一个正则表 ...
- java对email邮箱的真实、有效性验证
三种验证邮箱有效性的方式: 方式1: public static boolean checkEmail(String email) { if (!email.matches("[\\ ...
随机推荐
- python之变量篇
列表:a=['a',112,'bss']元组:只读列表,不能二次赋值str=('s','t',1.5)元字典:用"{ }"标识,键值对存储dic={}dic['s']='test' ...
- 关于javascript自定义对象(来自网络)(最近几天不会的)
javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...
- Android 学习第14课,Android 布局
布局分4种: 1. LinearLayout (线性布局) file:///H:/tool/01/Android/android-sdk-windows/docs/guide/topics/ui/la ...
- Linux chroot 并使用之前系统设备节点
/********************************************************************************* * Linux chroot 并使 ...
- IO消息机制
同步阻塞 同步非阻塞 异步阻塞 异步非阻塞 同步是函数自身等待结果 异步可采用状态轮询/通知/回调 返回结果: 阻塞和非阻塞的关注点是在等待消息的时候 线程的状态 同步阻塞 线程挂起 逻辑上函数不马上 ...
- Elasticsearch Network Settings
网络设置 Elasticsearch 缺省情况下是绑定 localhost.对于本地开发服务是足够的(如果你在相同机子上启动多个节点,它还可以形成一个集群),但是你需要配置基本的网络设置,为了能够在实 ...
- Android Studio Eclipse Code Formatter
在从Eclipse转到Android Studio上开发后,如果还想继续使用在Eclipse上制定的自定义的Code Formatter的话,需要按如下步骤操作:1.进入Settings界面,如果能看 ...
- 由java的八个基本数据类型说开去
Java中定义了四类/八种基本数据类型: 布尔型----boolean 字符型----char 整数型----byte,short,int,long 浮点型----float,double 这八种基本 ...
- python 模拟用户登录代码
需求:输入用户名,判断用户是否被锁定,锁定则退出,否则进入密码验证,输入三次错误密码之后此用户被锁定. userlist.txt里,用":"将用户名.密码.状态码分开: [root ...
- Java异常简介
异常指异于常态,和正常情况不一样,有错误出现.阻止当前方法或作用域执行的问题,称之为异常. Java中所有的与异常有关的类都继承于Throwable类,Throwable类有两个儿子,一个是Error ...