使用ASP(.NET)发送EMail<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
北京2865信箱160分箱(100085)冉林仓
n 在ASP中发送Email
在ASP中发送Email时往往需要一个COM组件支持,如果你没有第三方的Email组件,你可以使用IIS本身提供CDONTS EMail组件。这个组件使用时需要安装和启动SMTP服务。这个组件的名称为CDONTS.DLL,使用前需要使用RegSvr32注册这个组件。
CDONTS组件提供了一系列对象,包括AddressEntry、Attachment、Attachments、Folder、Message、Messages、NewMail、Recipient、Recipients、Session,我们经常使用的是NewMail对象。下面是NewMail对象提供的方法和属性:
名称 | 功能 | 格式 |
Attach | 添加附件 | Sub AttachFile(Source, [FileName], [EncodingMethod]) |
AttachURL | 以URL格式添加附加和数据 | Sub AttachURL(Source,ContentLocation, [ContentBase], [EncodingMethod]) |
BCC | 以“,”分隔的BCC接收者列表(暗送) | 字符串类型属性 |
Body | Text或者HTML格式的邮件正文 | 字符串类型属性 |
body format | 邮件正文格式 | 0:表示HTMl格式,1:表示Text格式 |
CC | 以“,”分隔的CC接收者列表(抄送) | 字符串类型属性 |
ContentBase | 带有URL附件的邮件中正文采用的URL基地址 | 字符串类型属性 |
ContentLocation | 带有URL附件的邮件中正文采用的URL | 字符串类型属性 |
From | 邮件发送方地址 | 字符串类型属性 |
Importance | 邮件级别 | 0: 普通 1:机密 2:绝密 |
Send | 发送邮件 | Sub Send([From], [To], [Subject], [Body], [Importance]) 各个参数可以参考上下文属性 |
SetLocaleIDs | 设置新消息的代码页标识 | Sub SetLocaleIDs(CodePageID As Long) |
Subject | 邮件主题 | 字符串类型属性 |
To | 以“,”分隔的接收者地址列表 | 字符串类型属性 |
Value | 任意的邮件头的值 | 字符串类型属性 |
Version | 当前集合数据对象库(CDO)的版本号 | 只读字符串类型属性 |
在使用有关对象的方法时,方括号参数可以省略。
下面是采用ASP使用的例子:
Dim MailObject
Set MailObject = Server.CreateObject("CDONTS.NewMail")
MailObject.Send "发送方邮件地址","接收方邮件地址","主题","邮件正文"
发送附件时可以这样:
Dim MailObject
Set MailObject = Server.CreateObject("CDONTS.NewMail")
Set MailObject = Server.CreateObject("CDONTS.NewMail")
att_fileName="附件文件名完整路径"
f_name="文件名"
MailObject.From="在这填写发件人地址"
MailObject.To="在这填写接收人地址"
MailObject.Subject="填写主题"
MailObject.Body="填写正文"
MailObject.AttachFile att_file,f_name
MailObject.Send
如果你需要了解CDONTS其它对象的信息,你可以在Visual Basic工程中添加CDONTS组件的引用,然后使用对象浏览器察看CDONTS类型库。添加CDONTS引用时可以浏览到Windows安装目录的系统目录(System32)。
n 使用ASP.NET发送EMail
使用ASP.NET发送EMail也很简单,它需要在Web服务器上使用微软公司的.NET框架SDK,在使用时需要你简单了解一些Visual Basic或者c#编程基础知识。
还是让我们看一个ASP.NET发送的例子程序:
SimpleMail.aspx
<% @Page Language="C#" %>
<% @Import Namespace="System.Web.Mail" %>
<%
string strTo = "接收方的邮件地址";
string strFrom = "发送方的邮件地址";
string strSubject = "邮件主题";
SmtpMail.Send(strFrom, strTo, strSubject,
"邮件正文");
Response.Write("Email was queued to disk ");
%>
从上面的片断代码,我们可以可以发现,采用.NET框架SDK发送EMail跟上面使用组件提供的接口方法和属性差不多。只不过前者引用创建一个COM组件对象,后者需要使用System.Web.Mail 名称空间的邮件服务支持。这个名称空间中有一个SmtpMail类,它提供了一个静态的 Send 方法接收四个与邮件有关的参数。
SmtpMail.Send(From, To, Subject, BodyText);
注意:ASP.NET对邮件的支持和ASP 3.0的CDONTS基本上相同,都需要本地安装和启动IIS的SMTP服务。
现在我们可以先把所有简单的方法抛在一边,先看一下名称空间提供的MailMessage 类。这个类封装了邮件发送的几乎所有细节。通过它可以发送一个HTML格式邮件。
(SimpleMailMessage.aspx).
<% @Page Language="C#" %>
<% @Import Namespace="System.Web.Mail" %>
<%
MailMessage msgMail = new MailMessage();
msgMail.To = "christophw@263.Net";
msgMail.Cc = "webmaster@263.Com";
msgMail.From = "webmaster@ASP.com";
msgMail.Subject = "Hi Chris, another mail";
msgMail.BodyFormat = MailFormat.Html;
string strBody = "<html><body><b>Hello World</b>" +
" <font color=\"red\">ASP.NET</font></body></html>";
msgMail.Body = strBody;
SmtpMail.Send(msgMail);
Response.Write("Email was queued to disk");
%>
这段代码比上面简单调用Send的例子更好些,因为它提供了更多的选项来发送邮件。
值得注意的是所有重载的Send方法都不会返回一个邮件发送成功的标识值。这主要是因为它只是简单地把邮件写到Inetpub的pickup文件夹,最终完成邮件阅读和发送是靠SMTP服务。发送错误的邮件同样也会写进一个文件,不过是写进一个BadMail文件夹。
使用ASP.NET发送组件也很容易,这时候需要使用System.Web.Mail名称空间的 MailAttachment组件对象,
(MailAttachment.aspx).
<% @Page Language="C#" %>
<% @Import Namespace="System.Web.Mail" %>
<%
MailMessage msgMail = new MailMessage();
msgMail.To = "christophw@263.NET";
msgMail.From = "webmaster@263.com";
msgMail.Subject = "Attachment Test";
msgMail.BodyFormat = MailFormat.Text;
msgMail.Body = "Check out the attachment!";
msgMail.Attachments.Add(new MailAttachment("c:\\Boot.INI"));
SmtpMail.Send(msgMail);
Response.Write("Email was queued to disk");
%>
msgMail.Attachments.Add(new MailAttachment("c:\\Boot。INI"));同样也可以换成下面一行:
MailAttachment maAttach = new MailAttachment("c:\\Boot.ini");
IList msgAttachments = msgMail.Attachments;
msgAttachments.Add(maAttach);
这里需要指出的是附件可以通过System.Collections名称空间的IList 接口来操纵。Ilist接口提供了Add方法。同样也可以用它来枚举或删除附件。还有就是你可以根据需要在MailAttachment构造中设置其编码类型。
下面是关于System.Web.Mail名称空间包含类的简单描述,详细的内容你可以参考.NET框架SDK有关文档。
System.Web.Mail 名称空间包含了一些类,它能够允许你利用集成在Windows2000/XP环境中的SMTP服务发送一个邮件及其附件。
它主要提供了一下几个类;
类名称及枚举定义 | 描述 |
MailAttachment | 提供一些属性和方法来构造一个邮件附件。 |
MailMessage | 提供一些属性和方法来构造一个邮件消息。 |
SmtpMail | 提供一些属性和方法来利用集成在集成在Windows2000/XP环境中的SMTP服务发送一个邮件及其附件 |
MailEncoding | 邮件编码,可以取Html或Text |
MailFormat | 邮件格式:可以取Base64 和UUEncode
|
MailAttachment类提供Encoding和Filename公有实例属性,分别指示邮件附件采用的编码类型和文件名。MailMessage类提供了attachments、BCC (Blind Carbon Copy)、body、BodyEncoding、CC (Carbon Copy)、From、Headers、Priority(取值为High、Low、Normal)、Subject、To、UrlContentBase等属性,使用方法可以参考ASP部分描述。
另外名称空间还提供了SmtpServer静态共享属性用于获取设置发送邮件消息使用的SMTP邮件服务器名称。各种重载的Send方法用于发送一个邮件消息。