使用Net.Mail、CDO组件、JMail组件三种方式发送邮件

原文:使用Net.Mail、CDO组件、JMail组件三种方式发送邮件

一、使用Net.Mail

         需要服务器认证,大部分服务器端口为25.

View Code

 1         /// <summary> 2 /// 用MailMessage通过需要认证的SMTP服务器发送邮件,可以发送附件 3 /// </summary> 4 /// <param name="frmAddress">发件箱地址,例:myaccount@163.com</param> 5 /// <param name="password">发件箱登录密码</param> 6 /// <param name="toAddress">收件箱地址,多个地址使用";"隔开,例:youraccount@sina.com</param> 7 /// <param name="copyTo">抄送地址,多个地址使用";"隔开,例:hisaccount@QQ.com</param> 8 /// <param name="mailSubject">邮件主题,例:MailTest</param> 9 /// <param name="mailContent">邮件内容,例:Hello</param>10 /// <param name="mailserver">发件箱所在的SMTP服务器,例:smtp.163.com</param>11         public void NetSendMail(string frmAddress, string password, string toAddress, string copyTo, string mailSubject, string mailContent, string mailserver)12         {13             ///添加发件人地址14             MailMessage mailMsg = new MailMessage();15             mailMsg.From = new MailAddress(frmAddress);16             ///添加收件人地址17             string split = ";";18             string[] toList = toAddress.Trim().Split(split.ToCharArray());19             for (int i = 0; i < toList.Length; i++)20             {21                 mailMsg.To.Add(toList[i].Trim());22             }23  24             ///添加抄送地址25             string[] ccList = copyTo.Trim().Split(split.ToCharArray());26             for (int i = 0; i < ccList.Length; i++)27             {28                 if (ccList[i].Trim().Length > 0)29                 {30                     mailMsg.CC.Add(ccList[i].Trim());31                 }32             }33  34             ///添加邮件主题35             mailMsg.Subject = mailSubject.Trim();36             mailMsg.SubjectEncoding = Encoding.UTF8;37  38             ///添加邮件内容39             mailMsg.Body = mailContent;40             mailMsg.BodyEncoding = Encoding.UTF8;41             mailMsg.IsBodyHtml = true;       //正文是否为html样式42  43             ///添加邮件附件        44             HttpFileCollection fileList = HttpContext.Current.Request.Files;45             for (int i = 0; i < fileList.Count; i++)46             {   ///添加单个附件47                 HttpPostedFile file = fileList[i];48                 if (file.FileName.Length <= 0 || file.ContentLength <= 0)49                 {50                     break;51                 }52                 string path = Server.MapPath("~/FileUpload/");           //附件保存在程序所在的目录FileUpload下53                 string name = System.IO.Path.GetFileName(file.FileName);54                 file.SaveAs(path + name);55                 mailMsg.Attachments.Add(new System.Net.Mail.Attachment(file.FileName));56             }57             try58             {59                 //实例化SmtpClient邮件发送类对象60                 SmtpClient client = new SmtpClient(mailserver, 25);    //大部分smtp服务器的端口是2561 //设置用于验证发件人身份的凭据62                 client.Credentials = new System.Net.NetworkCredential(frmAddress, password);63                 //发送邮件64                 client.Send(mailMsg);65                 Response.Write("<script type='text/javascript'>alert('发送成功!')</script>");66             }67             catch68             {69                 Response.Write("<script type='text/javascript'>alert('发送失败')</script>");70             }71         }

 

二、使用CDO组件

View Code

 1 /// <summary> 2 /// 用CDO组件通过需要认证的SMTP服务器发送邮件。 3 /// 添加cdosys.dll引用,可以在系统目录(如c:\winnt或c:\windows)的system32子目录中找到它(cdosys.dll)。 4 /// </summary> 5 /// <param name="frmAddress">发件箱地址,例:myaccount@163.com</param> 6 /// <param name="password">发件箱登录密码</param> 7 /// <param name="toAddress">收件箱地址,多个地址使用";"隔开,例:youraccount@sina.com</param> 8 /// <param name="copyTo">抄送地址,多个地址使用";"隔开,例:hisaccount@QQ.com</param> 9 /// <param name="mailSubject">邮件主题,例:MailTest</param>10 /// <param name="mailContent">邮件内容,例:Hello</param>11 /// <param name="mailserver">发件箱所在的SMTP服务器,例:smtp.163.com</param>12         public void CDOSendMail(string frmAddress, string password, string toAddress, string copyTo, string mailSubject, string mailContent, string mailserver)13         {14             try15             {16                 CDO.Message oMsg = new CDO.Message();17 18                 oMsg.From = frmAddress;          //添加发件人19 20                 oMsg.To = toAddress;        //多人用“;”,“,”分开,自动识别,21 22                 oMsg.CC = copyTo;23                 oMsg.Subject = mailSubject;24                 oMsg.HTMLBody = "<html><body>" + mailContent + "</body></html>";25                 CDO.IConfiguration iConfg = oMsg.Configuration;26                 ADODB.Fields oFields = iConfg.Fields;27 28                 oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"].Value = 2;29                 oFields["http://schemas.microsoft.com/cdo/configuration/sendemailaddress"].Value = frmAddress;30                 oFields["http://schemas.microsoft.com/cdo/configuration/smtpaccountname"].Value = toAddress;31                 oFields["http://schemas.microsoft.com/cdo/configuration/sendusername"].Value = frmAddress;32                 oFields["http://schemas.microsoft.com/cdo/configuration/sendpassword"].Value = password;33                 oFields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"].Value = 1;34                 //value=0 代表Anonymous验证方式(不需要验证)35 //value=1 代表Basic验证方式(使用basic (clear-text) authentication. 36 //The configuration sendusername/sendpassword or postusername/postpassword fields are used to specify credentials.)37 //Value=2 代表NTLM验证方式(Secure Password Authentication in Microsoft Outlook Express)38                 oFields["http://schemas.microsoft.com/cdo/configuration/languagecode"].Value = 0x0804;39                 oFields["http://schemas.microsoft.com/cdo/configuration/smtpserver"].Value = mailserver;40 41                 oFields.Update();42                 oMsg.BodyPart.Charset = "gb2312";43                 oMsg.HTMLBodyPart.Charset = "gb2312";44 45 46                 //添加邮件附件        47                 HttpFileCollection fileList = HttpContext.Current.Request.Files;48                 for (int i = 0; i < fileList.Count; i++)49                 {   ///添加单个附件50                     HttpPostedFile file = fileList[i];51                     if (file.FileName.Length <= 0 || file.ContentLength <= 0)52                     {53                         break;54                     }55                     string path = Server.MapPath("~/FileUpload/");           //附件保存在程序所在的目录FileUpload下56                     string name = System.IO.Path.GetFileName(file.FileName);57                     file.SaveAs(path + name);58                     oMsg.AddAttachment(file.FileName);59                 }60 61                 oMsg.Send();62                 oMsg = null;63             }64             catch (Exception e)65             {66                 throw e;67             }68         }

 

三、使用JMail组件

View Code

 1         /// <summary> 2 /// 用JMail组件发送邮件。 3 /// 添加jmail.dll引用 4 /// </summary> 5 /// <param name="frmAddress">发件箱地址,例:myaccount@163.com</param> 6 /// <param name="password">发件箱登录密码</param> 7 /// <param name="toAddress">收件箱地址,多个地址使用";"隔开,例:youraccount@sina.com</param> 8 /// <param name="copyTo">抄送地址,多个地址使用";"隔开,例:hisaccount@QQ.com</param> 9 /// <param name="mailSubject">邮件主题,例:MailTest</param>10 /// <param name="mailContent">邮件内容,例:Hello</param>11 /// <param name="mailserver">发件箱所在的SMTP服务器,例:smtp.163.com</param>12         public bool JMailSendMail(string frmAddress, string password, string toAddress, string copyTo, string mailSubject, string mailContent, string mailserver)13         {14             try15             {16                 MessageClass jmMessage = new MessageClass();17                 jmMessage.Charset = "gb2312";18                 jmMessage.ISOEncodeHeaders = false;       //信头编码iso-8859-1字符集19                 jmMessage.Encoding = "base64";             //附件的编码格式20 //jmMessage.ContentType = "text/html";       //正文类型,去掉,否则正文出现乱码21 22                 jmMessage.MailServerUserName = frmAddress;     //发件箱登录名23                 jmMessage.MailServerPassWord = password;        //发件箱密码24 25                 jmMessage.From = frmAddress;                   //发件箱26 27                 jmMessage.Subject = mailSubject;28                 jmMessage.Body = mailContent;29 30                 //回执,当对方阅读了邮件后提醒是否发送回执31                 jmMessage.ReturnReceipt = true;32                 jmMessage.AddNativeHeader("Disposition-Notification-To", frmAddress);//回执接受人的邮件地址33 34 //收件箱35                 string split = ";";36                 string[] toList = toAddress.Trim().Split(split.ToCharArray());37                 for (int i = 0; i < toList.Length; i++)38                 {39                     jmMessage.AddRecipient(toList[i].Trim(), "", "");40                 }41 42                 //抄送43                 string[] coList = copyTo.Trim().Split(split.ToCharArray());44                 for (int i = 0; i < coList.Length; i++)45                 {46                     jmMessage.AddRecipientCC(coList[i].Trim(), "", "");47                 }48 49                 ///添加邮件附件        50                 HttpFileCollection fileList = HttpContext.Current.Request.Files;51                 for (int i = 0; i < fileList.Count; i++)52                 {   ///添加单个附件53                     HttpPostedFile file = fileList[i];54                     if (file.FileName.Length <= 0 || file.ContentLength <= 0)55                     {56                         break;57                     }58                     string path = Server.MapPath("~/FileUpload/");           //附件保存在程序所在的目录FileUpload下59                     string name=System.IO.Path.GetFileName(file.FileName);60                     file.SaveAs(path + name);61                     jmMessage.AddAttachment(file.FileName);62                 }63 64                 if (jmMessage.Send(mailserver, false))65                 {66                     return true;67                 }68                 else69                 {70                     return false;71                 }72             }73             catch (Exception)74             {75 76                 throw;77             }78         }

 

      对于JMail组件,通常我们遇到的错误是:'The message was undeliverable. All servers failed to receive the message ',这其实是JMAIL返回的错误,并不是ASP代码产生的,根本原因是MAIL SERVER拒绝了JMAIL的请求.

  究其原因,是那些服务器不提供SMTP服务或者没有开启smtp服务;或是在服务器端开启了'禁止邮件中继服务'选项,也就是说不在其允许的IP段或指定范围内的空间里的程序是无法使用其SMTP服务的。解决方案:使用支持smtp的邮件服务器. 使用支持外来jmail申请验证身份,发送邮件的邮件服务器。 最好:使用自己的待遇smtp功能的企业邮局。因为外面的免费的邮局可能会有一些特殊设置,不如防止垃圾邮件,防止盗用邮件身份等等!

Jmail发送首先要通过邮件服务器验证。如果你的服务器不支持SMTP或者你的账号不能使用SMTP服务那么就无法发送。163以前的用户默认是开通POP和SMTP服务的,但新用户都不开通,需要付费才能使用。要想确定某一邮箱是否可以使用POP和SMTP,你可以用foxmail等邮件软件看能否收取该邮箱信件。

目前发现可以通过的stmp服务器有:smtp.qq.com、smtp.163.com,也就是说可以使用该类的邮箱给其他邮箱发送邮件。

时间: 2024-09-30 02:41:52

使用Net.Mail、CDO组件、JMail组件三种方式发送邮件的相关文章

生产订单组件消耗的三种方式

1.按计划发料方式 这种方式根据生产订单号来进行发料,在进行发料时,系统会根据订单BOM带出所需发料的清单,对于已经发过料的,将不再显示出来.这种方式也不能超计划发料,同时此方式可以削减库存预留. 2.计划外发料方式 采用这种方式进行发料,系统不会带出所需发料的清单,也不会削减库存预留,可以超计划发料 3.倒冲方式 采用这种方式,系统不需要做发料的操作,在订单做完工时,系统根据完工的数量及订单BOM,直接从相应的子件库存里倒扣相应的库存数.此种方式不会削减库存预留.

简述在Java Web组件之间的三种关联关系

在Java Web组件之间的三种关联关系: 1.请求转发 2.URL重定向 3.包含 请求转发: 允许把请求转发给同一应用程序中的其他web组件. 这种技术通常用于web应用控制层的servlet流程控制器,它检查http请求数据,并将请求转发到适合的目标组件,目标组建执行具体的请求处理操作,并生成响应结果. jsp页面中添加servlet中加入下面代码: <jap:forward page="hello.jsp"/> RequestDispatcher rd=reques

Android获取view高度的三种方式_Android

本文为大家分享了Android获取view高度的方法,供大家参考,具体内容如下 getMeasuredHeight()与getHeight的区别 实际上在当屏幕可以包裹内容的时候,他们的值相等, 只有当view超出屏幕后,才能看出他们的区别: getMeasuredHeight()是实际View的大小,与屏幕无关, 而getHeight的大小此时则是屏幕的大小. 当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小 具体方法 我们知道在oncr

安装MySQL常见的三种方式_Mysql

目录 安装MySQL的方式常见的有三种:  rpm包形式 通用二进制形式  源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mysql.com/downloads 关于MySQL中rpm包类型的介绍:  MySQL-client         客户端组件  MySQL-debuginfo      调试MySQL的组件  MySQL-devel          想针对于MySQL编译安装PHP等依赖于MySQL的

Android获取view高度的三种方式

本文为大家分享了Android获取view高度的方法,供大家参考,具体内容如下 getMeasuredHeight()与getHeight的区别 实际上在当屏幕可以包裹内容的时候,他们的值相等, 只有当view超出屏幕后,才能看出他们的区别: getMeasuredHeight()是实际View的大小,与屏幕无关, 而getHeight的大小此时则是屏幕的大小. 当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小 具体方法 我们知道在oncr

具体实现XML的三种方式

xml 在熟悉XML之前,我们至少应该了解一下这个技术到底是如何具体实现的.就目前的趋势来看(因为XML的有关标准改动都多达十七八次的,所以先不管它最后会怎样,先就目前的实现方式来看),要使得用户最后能够在客户端看到使用XML技术做出来的东西(如果要是用行业术语来解释的话,就是说,如何使用XSL级联样表转换XML的文档成其他的格式例如HTML.),主要有下面的三种实现手段: 1.第一种方式为:     让XML文档和与其关联的XSL级联样表同时被传送到客户端(通常使用的是浏览器),然后在客户端让

具体实现 XML 的三种方式

xml 在熟悉XML之前,我们至少应该了解一下这个技术到底是如何具体实现的.就目前的趋势来看(因为XML的有关标准改动都多达十七八次的,所以先不管它最后会怎样,先就目前的实现方式来看),要使得用户最后能够在客户端看到使用XML 技术做出来的东西(如果要是用行业术语来解释的话,就是说,如何使用XSL级联样表转换XML的文档成其他的格式例如HTML.),主要有下面的三种实现手段: 1.第一种方式为: 让XML文档和与其关联的XSL级联样表同时被传送到客户端(通常使用的是浏览器),然后在客户端让XML

天上不会掉馅饼&amp;nbsp;创业快速获风投的三种方式

不要寄托于奔波在IT会场.遇及更多的VC就能融到资金:更不要想着VC众多,东方不亮西方亮,总有一两个会看懂你的商业模式. 你所要做的,恰恰是不必去考虑VC的胃口,他们喜欢什么或者今年什么模式会很热,专注于你正在做的项目,想清楚它想透它. 只有三种方式会帮助你的网络公司快速融到资金: 第一种:先围绕你的网站主题狂做流量,把网站迅速做到ALEXA排名2000位左右,最好能更高些.注意不要做假,自欺欺人的结果只会是无始而终.在拥有了有一定的.庞大的且稳定的用户基础上进行变阵,顺势变成你千思百想出的商业

实现 Java 平台的三种方式

广泛地说,只要能执行 Java bytecode 者,就可以称为 Java 平台(Java platform).大致上,实现 Java 平台的方式有三种,分别是: Java 虚拟机器(Java Virtual Machine,JVM) Java 操作系统(Java Operating System) Java 芯片(Java Chip) 以下就此三种 Java 平台提出解说,并比较之. Java 虚拟机器 所谓的 Java 虚拟机器,指的是在操作系统上执行的一种程序,此程序可以解读 Java b