一、定义邮件发送类

/// <summary>
/// 发送邮件
/// </summary>
public class MailHelper
{
#region 私有变量 private string _mailTo; //接收方
private string _mailFrom; //发送方
private string _subject; //标题
private string _body; //内容
private string _username; //邮件用户
private string _pwd; //密码
private string _smtpclient; //smtp服务器名字
private string _youname; //关联姓名
private bool _bodyhtml = false; //正文是否为html格式
private List<string> _listCc = new List<string>();//抄送
//编码暂硬性规定为GB2312
private Encoding _encoding = Encoding.GetEncoding(); #endregion #region 私有属性 /// <summary>
/// smtp服务器
/// </summary>
private string SmtpClient
{
set
{
//格式如smtp.sina.com
Regex regex = new Regex(@"^smtp(\.([a-zA-Z0-9])+){2}$");
if (regex.IsMatch(value))
this._smtpclient = value;
else
throw new ArgumentException("smtp服务器设置失败");
}
} /// <summary>
/// 发送方
/// </summary>
private string MailTo
{
set
{
if (IsValidEMail(value))
this._mailTo = value;
else
throw new ArgumentException("发送方设置错误");
}
} /// <summary>
/// 用户名
/// </summary>
private string UserName
{
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("用户名不能为空");
if (!this._mailFrom.StartsWith(value))
throw new ArgumentException("用户名设置和发送方不匹配");
this._username = value;
}
} /// <summary>
/// 密码
/// </summary>
private string Pwd
{
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("密码不能为空");
this._pwd = value;
}
} /// <summary>
/// 发送给
/// </summary>
private string MailFrom
{
set
{
if (IsValidEMail(value))
this._mailFrom = value;
else
throw new ArgumentException("接收方设置错误");
}
} /// <summary>
/// 关联姓名
/// </summary>
private string YouName
{
set
{
if (string.IsNullOrEmpty(value))
this._youname = this._username;
else
this._youname = value;
}
} #endregion #region 私有方法 /// <summary>
/// 检测email格式
/// </summary>
/// <param name="email">email</param>
/// <returns>true为正确</returns>
private bool IsValidEMail(string email)
{
Regex regex = new Regex(@"\w+([-+.]\w+)*\w{2,}@\w+([-.]\w+)*\.\w+([-.]\w+)*");
if (regex.IsMatch(email))
return true;
else
return false;
} #endregion #region 公共属性 /// <summary>
/// 标题
/// </summary>
public string Subject
{
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("标题不能为空");
this._subject = value;
}
} /// <summary>
/// 正文
/// </summary>
public string Body
{
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("正文不能为空");
this._body = value;
}
} #endregion #region 公共方法 /// <summary>
/// 构造函数
/// </summary>
/// <param name="smtpclient">smtp服务器,格式如"smtp.sina.com"</param>
/// <param name="mailFrom">发送方,格式如"mymail@sina.com"</param>
/// <param name="username">登入名,必填,注意和发送方匹配</param>
/// <param name="pwd">密码,必填</param>
/// <param name="mailTo">接收方,格式如"youmail@sina.com"</param>
/// <param name="subject">标题,最好别为空</param>
/// <param name="body">正文,必填</param>
/// <param name="bodyhtml">正文是否为html格式</param>
/// <param name="youName">关联姓名, 选填</param>
public MailHelper(string smtpclient, string mailFrom,
string username, string pwd, string mailTo,
string subject, string body,
bool bodyhtml, string youName)
{
this.SmtpClient = smtpclient;
this.MailFrom = mailFrom;
this.UserName = username;
this.Pwd = pwd;
this.MailTo = mailTo;
this.Subject = subject;
this.Body = body;
this.YouName = youName;
this._bodyhtml = bodyhtml;
} /// <summary>
/// 添加抄送邮箱, 可多次调用
/// </summary>
/// <param name="mailCc">抄送的email</param>
public void AddMmailCc(string mailCc)
{
if (IsValidEMail(mailCc))
this._listCc.Add(mailCc);
else
throw new ArgumentException("抄送'" + mailCc + "'地址错误");
} /// <summary>
/// 发送邮件
/// </summary>
/// <returns>true-发送成功</returns>
public void Send()
{
Encoding encoding = this._encoding; MailMessage Message = new MailMessage(
new MailAddress(this._mailFrom, this._youname, this._encoding),
new MailAddress(this._mailTo)); Message.SubjectEncoding = this._encoding;
Message.Subject = this._subject;
Message.BodyEncoding = this._encoding;
Message.Body = this._body;
Message.IsBodyHtml = this._bodyhtml;
foreach (string strCc in _listCc)
{
Message.CC.Add(new MailAddress(strCc));
}
SmtpClient smtpClient = new SmtpClient(this._smtpclient);
smtpClient.Credentials = new NetworkCredential(this._username, this._pwd); smtpClient.Timeout = ;
smtpClient.Send(Message); //异步调用, 避免阻塞
//Timeout 属性对 SendAsync 调用没有影响
//smtpClient.SendAsync(Message, null);
} #endregion
}

二、调用

 MailHelper mail = new MailHelper("smtp.sina.cn", "邮箱帐号@sina.cn", "登录帐号", "登录密码",  "对方邮箱帐号", "邮件标题", "<a href='http://www.baidu.com'>点一点</a>", true, "");
mail.Send();

ps:个人邮箱发送以后,接收方可能会将邮件归到垃圾箱

C#发送邮件类的更多相关文章

  1. python封装发送邮件类

    import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart i ...

  2. asp.net C#发送邮件类

    很久前写的一个简单邮件发送类分享给大家: using System; using System.Data; using System.Configuration; using System.Web; ...

  3. PHP功能齐全的发送邮件类

    下面这个类的功能则很强大,不但能发html格式的邮件,还可以发附件 <?php class Email { //---设置全局变量 var $mailTo = ""; // ...

  4. php 发送邮件类

    //******************** 配置信息 ********************************            $smtpserver = "smtp.263 ...

  5. PHP CI框架email类发送邮件

    用CI框架发送邮件类 在中文标题太长的情况下会出现乱码,搜索后说是发送邮件的时候有标题长度的限制,按说的方法修改后,还是没能得到解决,后来发现需要转换邮件标题的编码,解决方法如下: 打开 librar ...

  6. PHP多种形式发送邮件

    1. 使用 mail() 函数 没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发.这个按照各个系统不同而定.使用参考手册. 2. 使用管道的形式 昨天刚测试成功,使用 ...

  7. php实现发送邮件

    smtp.php: <?php class smtp {     /* Public Variables */     var $smtp_port;     var $time_out;    ...

  8. PHP中发送邮件的几种方法总结

    1. 使用 mail() 函数 没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发.这个按照各个系统不同而定.使用参考手册. 2. 使用管道的形式 昨天刚测试成功,使用 ...

  9. 用Java发送邮件

    要用Java发送邮件,除过JDK本身的jar包之外,还需要两个额外的jar包:JavaMail和JAF.当然,如果你使用的JavaEE的JDK,那就不用单独去网上下载了,因为JavaEE的JDK中已经 ...

随机推荐

  1. Javascript:再论Javascript的单线程机制 之 DOM渲染时机

    Javascript:再论Javascript的单线程机制 之 DOM渲染时机 背景 Javascript是单线程事件驱动的,所有能看到的Javascript代码都是在一个线程执行,定时器回调和AJA ...

  2. ASP.NET4.5Web API及非同步程序开发系列

    ASP.NET4.5Web API及非同步程序开发系列 认识ASP.NET WEB API 他的前身为WCF WEB API用于协助WCF支持RestFul.现在集成进ASP.NET,正式更名为ASP ...

  3. poj 3897 Maze Stretching 二分+A*搜索

    题意,给你一个l,和一个地图,让你从起点走到终点,使得路程刚好等于l. 你可以选择一个系数,把纵向的地图拉伸或收缩,比如你选择系数0.5,也就是说现在上下走一步消耗0.5的距离,如果选择系数3,也就是 ...

  4. zoj 1152 A Mathematical Curiosity

    方法:枚举 做这道题,在第十行的位置WA了很多次,(n || m)不能写成(n + m),m可能是负数,一直没注意到,导致不停的WA....... #include <stdio.h> i ...

  5. 异常分析:关于jsp页面使用jstl

    1.在jsp页面中使用如下代码加入jstl的支持 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/c ...

  6. js手机号批量滚动抽奖代码实现

    我们平时在看一些选秀节目或一些歌唱类比赛节目时经常会看到在现场的大屏幕上会有观众的手机号在滚动来选出谁是幸运观众或谁中了什么奖项,这些手机号都是现场观众或场外观众在给选手投票时产生的,当主持人一声开始 ...

  7. es6 Module

    前言: 这是阮一峰老师的ECMA6入门module一章的缩减,只抽取了我在项目中有用到的内容.带着问题去看老师的教程.感觉吸收更快,也明白了偶尔遇到的export不出来的问题. es6模块设计思想: ...

  8. 算法笔记_014:合并排序(Java)

    1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...

  9. 试图解释下ERP

    ERP,字面的意思就是企业资源规划.但现在基本上是企业信息系统的统称,过去叫MIS.我们就是有这个本事,不管什么高大上的事物,很快就会做的很烂. 你可以这样理解ERP. 现在来了个订单,你需要回答下面 ...

  10. ProgrammingContestChallengeBook

    POJ 1852 Ants POJ 2386 Lake Counting POJ 1979 Red and Black AOJ 0118 Property Distribution AOJ 0333 ...