原文:利用System.Net.Mail 的SmtpClient发送邮件

几个月前总结过关于Jmail发送邮件,当时用Jmail发送邮件发送速度有点慢(可能对Jmail了解不是很多).现在改为用微软提供的SmtpClient来发送邮件。

MailMessage 用于构造可以使用SmtpClient类传输到Smtp服务器以便传递的电子邮件;

使用MailMessage初始化MailMessage对象时,可以将电子邮件的发信人,收件人,主题和正文指定为参数。这些参数也可能被设置,或者使用MailMessage对象上的属性访问。

常用的属性:

附件    Attachments

密送    bcc

抄送   cc

Content-Type  bodyEncoding/subjectEncoding

邮件正文  body

收件人  To

发件人  From

Subject  sujbect

使用AlternateViews属性指定一个电子邮件不同格式的副本,如果发送HTML格式的邮件,可能希望同时提供邮件的纯文本格式,以防止一些收件人使用的电子邮件阅读程序无法显示html内容,另外这是我们使用body属性指定文本格式。

下面用两种方式发邮件:

Send

   ArrayList list = new ArrayList();
list.Add("*****@neotrident.com");
list.Add("*****@gmail.com");
list.Add("*****@126.com");
list.Add("*****@qq.com");
list.Add("*****@yahoo.com.cn");
list.Add("*****@tarena.com.cn");
list.Add("*****@me.com");
MailMessage mailMessage = new MailMessage();
for (int i = ; i < list.Count; i++)
{
MailAddress toAddress = new MailAddress(list[i].ToString());
mailMessage.To.Add(toAddress);//收件人
mailMessage.CC.Add(toAddress);//抄送
mailMessage.Bcc.Add(toAddress);//密送
}
string fileName = @"E:\2012年Q2新员工培训.pdf";
Attachment attachment = new Attachment(fileName); mailMessage.Attachments.Add(attachment);
mailMessage.From = new MailAddress("发件人邮箱地址", "**科技有限公司");
mailMessage.Subject = "hello";
mailMessage.SubjectEncoding = System.Text.Encoding.Unicode;
mailMessage.Body = "hello world";
mailMessage.BodyEncoding = System.Text.Encoding.Unicode;
string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=utf-8\">";
body += "</HEAD><BODY><DIV><FONT face=Arial color=#ff0000 size=2>this is some HTML text";
body += "</FONT></DIV></BODY></HTML>";
ContentType type = new ContentType("text/html");
AlternateView view = AlternateView.CreateAlternateViewFromString(body, Encoding.Unicode, "text/html");
mailMessage.AlternateViews.Add(view);
SmtpClient client = new SmtpClient("smtp.126.com");
client.Credentials = new System.Net.NetworkCredential("发件人邮箱地址", "邮箱密码");
client.Send(mailMessage);

第二种利用:SendAsync,

将指定的电子邮件发送到 SMTP 服务器以便传递。 此方法不会阻止调用线程,并允许调用方将对象传递给操作完成时调用的方法。第二种方式要在页面中设置Async="true"

SendAsync

  protected void Page_Load(object sender, EventArgs e)
{
ArrayList list = new ArrayList();
list.Add("***@neotrident.com");
list.Add("***@gmail.com");
list.Add("***@126.com");
list.Add("***@qq.com");
list.Add("***@yahoo.com.cn");
list.Add("***@tarena.com.cn");
list.Add("***@me.com");
MailMessage mailMessage = new MailMessage();
for (int i = ; i < list.Count; i++)
{
MailAddress toAddress = new MailAddress(list[i].ToString());
mailMessage.To.Add(toAddress);//收件人
mailMessage.CC.Add(toAddress);//抄送
mailMessage.Bcc.Add(toAddress);//密送
}
string fileName = @"E:\2012年Q2新员工培训.pdf";
Attachment attachment = new Attachment(fileName); mailMessage.Attachments.Add(attachment);
mailMessage.From = new MailAddress("发件人地址", "**科技有限公司");
mailMessage.Subject = "hello";
mailMessage.SubjectEncoding = System.Text.Encoding.Unicode;
mailMessage.Body = "hello world";
mailMessage.BodyEncoding = System.Text.Encoding.Unicode;
string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=utf-8\">";
body += "</HEAD><BODY><DIV><FONT face=Arial color=#ff0000 size=2>this is some HTML text";
body += "</FONT></DIV></BODY></HTML>";
ContentType type = new ContentType("text/html");
AlternateView view = AlternateView.CreateAlternateViewFromString(body, Encoding.Unicode, "text/html");
mailMessage.AlternateViews.Add(view);
SmtpClient client = new SmtpClient("smtp.126.com");
client.Credentials = new System.Net.NetworkCredential("发件人地址", "密码");
//client.Send(mailMessage);
client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
string userState = "test message1";
client.SendAsync(mailMessage, userState);
if (mailsent == false)
{
client.SendAsyncCancel();
}
Response.Write("Goodbye"); }
static bool mailsent = false;
void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
string token = (string)e.UserState;
if (e.Cancelled)
{
Response.Write(string.Format("{0} Send canceled.",token));
}
if (e.Error != null)
{
Response.Write(string.Format("[{0}] {1}", token, e.Error));
}
else
{
Response.Write("Message sent");
}
mailsent = true;
}

就这可以用2种方式,以上代码包括发送附件,to,bcc,cc,正文内容的不同格式(html)

利用System.Net.Mail 的SmtpClient发送邮件的更多相关文章

  1. System.net.mail 使用ssl发送邮件失败

    我采用了.net 的自带组件System.Net.Mail发送邮件,主要是在客户注册网站成功的时候发条欢迎邮件,最近邮件无法发送了,看了下腾讯smtp邮件配置,所有的邮件发送都换成ssl了,之前用的是 ...

  2. 利用System.Net.Mail 发送邮件

    我这里只是试了一下发mail的功能,感觉.net自带的发mail是比较全的,还是直接上我的code 参数文章:System.Net.Mail 发送邮件 SMTP协议 using System; usi ...

  3. 利用System.Net.Mail和多线程实现邮件发送

    对于邮件发送,一般来说,程序会响应超过1秒,这样对于用户体验来说,让用户等待的时间过长,而且发送的邮件越多时间就越长,所以这里我利用了线程的来处理邮件发送这种耗时的工作,废话不多说,直接上代码 pri ...

  4. System.Web.mail ----虚拟发件人发送邮件

     转载别人的 使用SMTP发送邮件   说到邮件发送,先提一下SMTP. SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议.它是一组用于从源地址到目的 ...

  5. System.net.mail 腾讯ssl发送邮件超时

    我采用了.net 的自带组件 System.Web.Mail.MailMessage发送邮件,主要是在客户注册网站成功的时候发条欢迎邮件,最近邮件无法发送了,看了下腾讯smtp邮件配置,所有的邮件发送 ...

  6. C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)

    net2.0后,C#可以利用System.Net发送邮件了. 代码整理如下: 3. 增加IProcessMessage类,定义了一个消息方法,用于消息传递 /********************* ...

  7. 在.net程序中使用System.Net.Mail来发送邮件

    System.Net.Mail是微软自家提供的工具,在.net程序中可以使用该空间中的SmtpClient实例来实现邮件的发送. 使用System.Net.Mail空间与Web.config配置相配合 ...

  8. asp.net 发送邮件代码 System.Net.Mail

    前台页面 SendEmail.aspx 代码 using System.Net.Mail;using System.Net; <h2> 发送电子邮件演示 </h2> <t ...

  9. C#使用 System.Net.Mail发送邮件功能

    .NET 里包含了很多很丰富的邮件发送与接受的API在 System.Net.Mail命名空间里,使得我们开发发送和接受邮件相关功能变得简单,下面是一个简单发送邮件的功能: private void ...

随机推荐

  1. JDK源码学习系列03----StringBuffer+StringBuilder

                         JDK源码学习系列03----StringBuffer+StringBuilder 由于前面学习了StringBuffer和StringBuilder的父类A ...

  2. [转载][NAS] 使用win8的“存储池”功能~

    之前自己用DQ77KB搭建一个小存储系统(帖子链接:http://www.chiphell.com/thread-567753-1-1.html),一直使用intel主板带的软RAID功能构建RAID ...

  3. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点

    /* Create by sndnvaps<sndnvaps@gmail.com> * data: 2015-04-12* upload 2 datapoint to yeelink.ne ...

  4. vc++笔记十一

    一.LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 连接器LNK是通过调用cvtres.exe完毕文件向coff格式的转换的,所以出现这样的错误的原因就是cvtres.exe出现了问题 ...

  5. JS学习笔记-OO疑问之封装

    封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 一.匿名函数 即没有名字的函数,其创建方式为 fu ...

  6. C++习题 对象数组求最大值

    Description 建立一个对象数组,内放n(<10)个学生的数据(学号.成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出n个学生中成绩最高者,并输出其学号. In ...

  7. Intent用法

    Intent是android系统中的最佳男主角,Intent翻译成中文的意思是"意图",说白了就是"我想要...",也就是说眼下运行中的Activity想要请其 ...

  8. 使用Bootstrap 他写道网站

    新发现vdceye有些难看的网站,为了找到一个bootstrap工具,我一次又一次地写信给网站 这个工具是很容易使用 http://vdceye.com/ 版权声明:本文博客原创文章,博客,未经同意, ...

  9. C# 读取IE缓存文件(2)

    private void button1_Click(object sender, EventArgs e) { , nBufSize; IntPtr buf; INTERNET_CACHE_ENTR ...

  10. 微通道产品经理Grover采访:美国的微通道设计

    "'哥'在中国是一种尊称吗?哈哈.我们平时都叫张小龙'龙哥'." "是的.Dan哥,当你认为某个人牛逼的时候,你就能够叫他'哥'." 我对于Dan Grover ...