在ColdFusion中使用邮件服务器
利用CFMAIL标签和CFPOP标签,你可以为你的应用程序增添交互式的email特性,提供与
邮件服务器的双向接口。
在ColdFusion中使用邮件服务器
在应用程序中加入email功能使你能对用户的请求自动作出响应。在应用程序中你可以
通过许多方式使用email。例如;
· 根据用户的请求触发email信息
· 允许用户通过email请求或接收附加信息
·
根据定购情况确认客户信息
·
根据数据库查询结果发送支票或余额信息
ColdFusion提供了几种方式来将email集成到应用程序中。要发送email,通常应使用
“简单邮件传输协议”(SMTP),要接收email,通常应使用“邮局协议”(POP)。要
在应用程序中使用email,你必须可以访问一个SMTP服务器,还要有一个合法的POP帐号
和密码。
发送email信息(SMTP)
发送email信息(SMTP)
发送email信息之前,你必须可以访问一个SMTP邮件服务器。另外,在运行需要使用
SMTP服务器的应用程序文件之前,你必须配置ColdFusion
Administrator,指定使用哪个SMTP服务器。配置ColdFusion的email设置步骤如下:
1、在ColdFusion Administrator中打开Mail页。
2、在Mail Server框中,输入你要使用的SMTP服务器的地址
3、服务器端口设置和连接超时设置保持其缺省值
4、点击Apply,保存以上的设置
5、点击Verify按钮,确证ColdFusion可以访问你所设定的邮件服务器。
用CFMAIL发送SMTP邮件
CFMAIL标签支持从ColdFusion应用程序内发送SMTP(简单邮件传输协议)邮件。CFMAIL
标签与CFOUTPUT标签相似,只不过CFMAIL将文本输出为SMTP邮件,而不是输出到屏幕上。
在CFOUTPUT中使用的所有属性都可以用于CFMAIL。
下面的例子是一个简单的CFMAIL标签,其中用form变量构造邮件信息的FROM,TO,
Subject和信息体等部分。
<CFMAIL QUERY="GetList"
TO="#Email#"
FROM="Sales DepartmentList Manager"
SUBJECT="#Form.Subject#">
#FORM.Body#
</CFMAIL>
CFMAIL示例
包含CFMAIL标签的文件可以根据该标签的设置动态地生成email信息,你可以利用
CFMAIL实现的功能有:
发送一个email
,其接收者及其内容取决于用户输入到一个HTML表单中的数据。
根据查询结果将email 发送给一批收信者。
根据查询结果发送定制的email
信息,如帐单信息,其收信者动态地由数据库查询决定。
与邮件信息一起发送一个MIME文件附件。
CFMAIL与CFOUTPUT很相似,两者有一些相同的属性——QUERY,GROUP,STARTROW和
MAXROWS等。而CFMAIL还有一些与邮件有关的特殊属性,用于处理邮件标题信息以及
MIME文件和HTML文件等。
发送基于form的email
在下面的例子中,用户在表单中输入的咨询信息被发送到市场部:
<CFMAIL FROM="#Form.EMailAddress#"
TO="marketing@allaire.com"
SUBJECT="Customer Inquiry">
A customer inquiry was posted to our Web site:
Name: #Form.FirstName# #Form.LastName#
Subject: #Form.Subject#
#Form.InquiryText#
</CFMAIL>
发送基于查询的email
在下面的例子中,查询ProductRequest的任务是获取过去七天中对某个产品进行咨询的
客户列表。然后这个列表被加上合适的标题和脚注,发送给市场部:
<CFMAIL QUERY="ProductRequests"
FROM="webmaster@allaire.com"
TO="marketing@allaire.com"
SUBJECT="ColdFusion status report">
Here is a list of people who have inquired about
Allaire ColdFusion over the last seven days:
<CFOUTPUT>
#ProductRequests.FirstName# #ProductRequests.LastName#
(#ProductRequests.Company#) - #ProductRequests.EMailAddress#
</CFOUTPUT>
Regards,The WebMaster
webmaster@allaire.com
</CFMAIL>
注意在标准的CFMAIL信息中嵌入了一个CFOUTPUT标签,用于提供动态内容。CFOUTPUT内
的语句将对查询“ProductRequest”的查询结果中每一条记录重复执行,而CFOUTPUT上
面和下面的部分别作为邮件的标题和脚注信息。
向多个收信者发送email
在下面的例子中,查询CFBetaTesters用于获取一个正在使用ColdFusion b 测试版的用
户列表。然后根据此查询的结果向每个用户发送一个通知。告知他们b 测试版已有一个
新版本发布:
<CFMAIL QUERY="CFBetaTesters"
FROM="beta@allaire.com"
TO="#TesterEMail#"
SUBJECT="ColdFusion Beta Four Available">
To all ColdFusion beta testers:
ColdFusion Beta Four is now available for downloading
from the Allaire site.The URL for the download is:
http://beta.allaire.com
Regards,
ColdFusion Technical Support
beta@allaire.com
</CFMAIL>
在这个例子中,email信息不包含动态内容。但此信息的目标email地址是一个动态参数。
注意:TO属性中“TesterEmail”字段来自查询结果。
为多个收信者定制Email
在下面的例子中,查询“GetCustomers”用于获取一批用户的联系信息。然后查询结果
被用来向每个用户发送一个email,要求他们证实其联系信息是否仍然有效:
<CFMAIL QUERY="GetCustomers"
FROM="service@allaire.com"
TO="#EMail#"
SUBJECT="Contact Info Verification">
Dear #FirstName# -
We’d like to verify that our customer
database has the most up-to-date contact
information for your firm. Our current
information is as follows:
Company Name: #Company#
Contact: #FirstName# #LastName#
Address:
#Address1#
#Address2#
#City#, #State# #Zip#
Phone: #Phone#
Fax: #Fax#
Home Page: #HomePageURL#
Please let us know if any of the above
information has changed, or if we need to
get in touch with someone else in your
organization regarding this request.
Thanks,
Allaire Customer Service
service@allaire.com
</CFMAIL>
注意在CFMAIL的TO属性中用到了查询字段#Email#,将邮件发送到查询所得的email地址。
在CFMAIL的信息体中用到了其它查询变量(FirstName,LastName等),为不同的收信
者定制不同的邮件内容。
附带一个MIME文件
在下的例子中,一个MIME文件与email信息一起被发送:
<CFMAIL FROM="info@allaire.com"
TO="jdoe@supercomputer.com"
SUBJECT="File you requested"
MIMEATTACH="c:/cfmanual.doc">
Dear Joe,
Here is a copy of the file you requested.
Regards,
The Allaire Team
</CFMAIL>
高级选项
ColdFusion所实现的SMTP邮件使用缓冲结构。也就是说,当处理程序文件中的CFMAIL标
签时,并不立即发送邮件,而是将邮件保存在硬盘上,在后台进行处理。这种结构有两
个显著的优点:
1、用户不必等待SMTP发送过程结束即可继续下面的操作。当用户的操作导致大量的邮
件发送时,这一优点特别有用。
2、用CFMAIL发送信息是可靠的,即使出现意外事故如断电,服务器死机等情况,邮件
仍可发送到目的地。
在大多数情况下,缓冲在硬盘上的邮件信息会立即被ColpFusion处理。但是,如果
ColpFusion特别忙或者已经有许多邮件等待处理,则邮件会被推迟发送。
将邮件发送为HTML
许多新的Internet邮件程序都可以读取并解释邮件信息中的HTML代码。CFMAIL标签允许
你用TYPE属性将邮件信息类型指定为HTML。TYPE属性只接受HTML作为参数,用于通知客
户端软件,邮件信息中嵌有需要处理的HTML标签。只有客户端软件可以解释HTML代码时,
这一特性才有用处。
覆盖缺省的SMTP服务器设置
你可以用下表所列的可选CFMAIL属性覆盖ColdFusion
Administrator中的缺省SMTP服务器设置:
CFMAIL 标签
可选属性
描述
SERVER
发送邮件所使用的SMTP服务器的地址。
PORT
SMTP服务器监听请求的TCP/IP端口号,通常总是25。
TIMEOUT
与SMTP服务器连接超时的秒数。
错误日志和未发送信息
SMTP信息的处理过程中所发生的错误都被记录在文件errors.log中。错误日志中的每条
记录包含发生错误的日期和时间以及关于错误原因的诊断信息。
由于发生错误而未能发送的邮件信息被写入/cfusion/mail/undelivr目录。与未发送信
息相对应的错误日志记录中包含被写入undelivr目录的文件名。
收取邮件(CFPOP)
收取邮件(CFPOP)
CFPOP标签为ColdFusion应用程序增添了Internet邮件客户端的特性。当你想在应用程
序中收取邮件时,可以使用CFPOP。下面是可以使用CFPOP的两个实例:
·
如果你的站点有多人共用的邮箱(Sales@yourcompany.com),那么构造一个
ColdFusion前台邮件界面,为每个用户实现取信功能,将是一种有效的方法。
·
在许多应用程序中,当邮件的格式服务于特定任务时,可以利用CFPOP对邮件进行自动
处理。
CFPOP示例
这个例子演示了CFPOP标签的基本语法:
<CFPOP SERVER="my.mailserver.com"
USERNAME=#username#
PASSword=#pwd#
ACTION="GetHeaderOnly"
NAME="getmsghdrs">
<BODY>
<CFOUTPUT>
You have #getmsghdrs.RecordCount# messages to read.
</CFOUTPUT>
<CFOUTPUT QUERY="getmsghdrs">
<P><B>Date: </B>#getmsghdrs.date#</P>
<P><B>From: </B>#getmsghdrs.from#</P>
</CFOUTPUT>
</BODY>
使用CFPOP
在ColdFusion应用程序中实现CFPOP标签的步骤如下:
1、选择要在ColdFusion应用程序中访问的邮箱。
2、确定你需要处理哪些邮件信息部件:信息标题,信息体,附件等。
3、决定是否需要将邮件信息保存到数据库中。
4、决定在收取邮件后是否从POP服务器上删除该邮件。
5、在应用程序中利用CFPOP标签建立访问指定邮箱的用户界面。
6、建立一个用于输出处理的程序文件。收取的信息中可以包含浏览器不能正确显示的
ASCII字符。
在CFOUTPUT标签中可以用函数HTMLCodeFormat和HTMLEditFormat来控制浏览器的输出显
示。在后面的例子中要注意这两个函数的使用。
CFPOP查询变量
对每个CFPOP查询,都将返回两个变量:
· RecordCount:查询结果的记录总数。
· CurrentRow:在CFOUTPUT循环中正在处理的当前记录。
你可以在CFOUTPUT中引用这些变量,只需以查询名作为变量名的前缀。查询名即CFPOP
的NAME属性的值。例如:
<CFOUTPUT>
This operation returned #Sample.RecordCount# messages.
</CFOUTPUT>
处理POP邮件
处理POP邮件
CFPOP的ACTION属性用来指定要获取什么数据。你可以获取所有数据(GetA11),只获
取标题数据(GetHeaderOnly),或者删除邮件(DELETE)。后面将给出几个例子。注
意要使下面的例子能成功运行,你需要以一个合法的用户名和密码引用某个有效的POP
服务器。
只返回信息标题
使用CFPOP标签时,若ACTION=“GetHeaderOnly”,则ColdFusion只将邮件的标题信息
返回到NAME属性所指定的查询中。标题信息有下面几种:
· DATE
· FROM
· MESSAGENUMBER
· REPLYTO
· SUBJECT
· CC
· TO
标题信息
CFPOP所返回的邮件标题有可能被括在HTML代码中。你可以用ColdFusion函数HTMLCode
Format将HTML标签转换为替代字符,例如用“>”表示“>”,用“&Lt”
表示“<”。
另外,CFPOP返回的日期值可以用函数ParseDateTime进行处理,该函数将POP日期时间
对象转换为GMT(格林威治时间)。
你可以在CFOUTPUT中引用这些标题,如下例所示:
<CFOUTPUT>
#ParseDateTime(queryname.date, "POP")#
#HTMLCodeFormat(queryname.from)#
#HTMLCodeFormat(queryname.messagenumber)#
</CFOUTPUT>
例子:获取邮件标题
用户可以从POP服务器获取或删除邮件信息,下面的例子文件holronly.cfm演示了如何
获取邮件的标题信息:
例子文件:
hdronly.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Header Example</TITLE>
</HEAD>
<BODY>
<H2>This example retrieves message
header information:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="GetHeaderOnly"
NAME="Sample">
<CFOUTPUT QUERY="Sample">
MessageNumber: #HTMLEditFormat(Sample.MESSAGENUMBER)# <BR>
To: #HTMLEditFormat(Sample.TO)# <BR>
From: #HTMLEditFormat(Sample.FROM)# <BR>
Subject: #HTMLEditFormat(Sample.SUBJECT)# <BR>
Date: #HTMLEditFormat(Sample.DATE)# <BR>
Cc: #HTMLEditFormat(Sample.CC)# <BR>
ReplyTo: #HTMLEditFormat(Sample.REPLYTO)# <BR>
</CFOUTPUT>
</BODY>
</HTML>
返回整个邮件
使用CFPOP时指定ACTION=“GetA11”,ColdFusion除了返回与GetHeaderOnly
相同的字段外,还返回另外两个字段,BODY和HEADER。
在下面的例子文件hdrbody.cfm中,ACTION属性被设为“GetA11”,因此它将获取邮件
的标题和信息体。
例子文件: hdrbody.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Body Example</TITLE>
</HEAD>
<BODY>
<H2>This example adds retrieval of
the message body:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="GetAll"
NAME="Sample">
<CFOUTPUT QUERY="Sample">
MessageNumber: #HTMLEditFormat(Sample.MESSAGENUMBER)# <BR>
To: #HTMLEditFormat(Sample.TO)# <BR>
From: #HTMLEditFormat(Sample.FROM)# <BR>
Subject: #HTMLEditFormat(Sample.SUBJECT)# <BR>
Date: #HTMLEditFormat(Sample.DATE)# <BR>
Cc: #HTMLEditFormat(Sample.CC)# <BR>
ReplyTo: #HTMLEditFormat(Sample.REPLYTO)# <BR>
Body: #HTMLCodeFormat(Sample.BODY)# <BR>
Header: #HTMLCodeFormat(Sample.HEADER)# <BR>
</CFOUTPUT>
</BODY>
</HTML>
返回附件
若ACTION属性设置为“GetA11”,并同时指定ATTACHMENTPATH属性,则ColdFusion返回
两个额外的字段:
· ATTACHMENTS——包含一列附件源的名字,以制表符为分隔符。
· ATTACHMENTFILES——包含实际写入服务器的一列临时文件名:以制表符为分
隔符。
你可以用CFFILE标签删除这些临时文件。
并非所有的邮件都带有附件。如果一个邮件没有附件,则ATTACHMENTS属性和
ATTACHMENTFILES属性均为一空字符串。
处理附件文件名
为避免文件重名所带来的问题,ColdFusion为所有的附件建立临时文件。如果你收取的
邮件带有附件,你可以用ATTACHMENTPATH属性选择附件的保存位置。应用程序开发者的
任务是管理这些文件,使对它们的访问不会混淆。
程序开发者还应注意清除CFPOP标签执行时所产生的临时文件。
下面的例子文件attch.cfm返回包括附件在内的邮件信息的所有内容:
例子文件: attach.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Attachment Example</TITLE>
</HEAD>
<BODY>
<H2>This example retrieves message header,
body, and all attachments:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="GetAll"
ATTACHMENTPATH="c:/attachdir"
NAME="Sample">
<CFOUTPUT QUERY="Sample">
MessageNumber: #HTMLEditFormat(Sample.MESSAGENUMBER)# <BR>
To: #HTMLEditFormat(Sample.TO)# <BR>
From: #HTMLEditFormat(Sample.FROM)# <BR>
Subject: #HTMLEditFormat(Sample.SUBJECT)# <BR>
Date: #HTMLEditFormat(Sample.DATE)# <BR>
Cc: #HTMLEditFormat(Sample.CC)# <BR>
ReplyTo: #HTMLEditFormat(Sample.REPLYTO)# <BR>
Attachments: #HTMLEditFormat(Sample.ATTACHMENTS)# <BR>
Attachment Files: #HTMLEditFormat(Sample.ATTACHMENTFILES)# <BR>
Body: #HTMLCodeFormat(Sample.BODY)# <BR>
Header: #HTMLCodeFormat(Sample.HEADER)# <BR>
</CFOUTPUT>
</BODY>
</HTML>
删除邮件
缺省情况下,收取邮件时并不将邮件从POP服务器上删除,如果你想删除已收取的邮件,
则必须将ACTION属性设为“Delete”。
CFPOP返回的MESSAGENUMBER变量包含了你需要送回到POP服务器的邮件序号,该序号指
明要删除哪个邮件。应注意的是:
·
一旦删除了一个邮件,就无法恢复它。
· 每次对POP服务器执行完一个Delete操作后,邮件序号就会被重新分配。例如,
如果从POP服务器收取了四个邮件,返回的邮件序号为1,2,3,4。如果随后在一个
CFPOP标签内删除了两个邮件,则邮件3和邮件4会分别被分配给序号1和2。
例子:删除邮件
例子文件: msgdel.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Delete Example</TITLE>
</HEAD>
<BODY>
<H2>This example deletes messages:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="Delete"
MESSAGENUMBER="1,2,3">
</BODY>
</HTML>
利用CFMAIL标签和CFPOP标签,你可以为你的应用程序增添交互式的email特性,提供与
邮件服务器的双向接口。
在ColdFusion中使用邮件服务器
在应用程序中加入email功能使你能对用户的请求自动作出响应。在应用程序中你可以
通过许多方式使用email。例如;
· 根据用户的请求触发email信息
· 允许用户通过email请求或接收附加信息
·
根据定购情况确认客户信息
·
根据数据库查询结果发送支票或余额信息
ColdFusion提供了几种方式来将email集成到应用程序中。要发送email,通常应使用
“简单邮件传输协议”(SMTP),要接收email,通常应使用“邮局协议”(POP)。要
在应用程序中使用email,你必须可以访问一个SMTP服务器,还要有一个合法的POP帐号
和密码。
发送email信息(SMTP)
发送email信息(SMTP)
发送email信息之前,你必须可以访问一个SMTP邮件服务器。另外,在运行需要使用
SMTP服务器的应用程序文件之前,你必须配置ColdFusion
Administrator,指定使用哪个SMTP服务器。配置ColdFusion的email设置步骤如下:
1、在ColdFusion Administrator中打开Mail页。
2、在Mail Server框中,输入你要使用的SMTP服务器的地址
3、服务器端口设置和连接超时设置保持其缺省值
4、点击Apply,保存以上的设置
5、点击Verify按钮,确证ColdFusion可以访问你所设定的邮件服务器。
用CFMAIL发送SMTP邮件
CFMAIL标签支持从ColdFusion应用程序内发送SMTP(简单邮件传输协议)邮件。CFMAIL
标签与CFOUTPUT标签相似,只不过CFMAIL将文本输出为SMTP邮件,而不是输出到屏幕上。
在CFOUTPUT中使用的所有属性都可以用于CFMAIL。
下面的例子是一个简单的CFMAIL标签,其中用form变量构造邮件信息的FROM,TO,
Subject和信息体等部分。
<CFMAIL QUERY="GetList"
TO="#Email#"
FROM="Sales DepartmentList Manager"
SUBJECT="#Form.Subject#">
#FORM.Body#
</CFMAIL>
CFMAIL示例
包含CFMAIL标签的文件可以根据该标签的设置动态地生成email信息,你可以利用
CFMAIL实现的功能有:
发送一个email
,其接收者及其内容取决于用户输入到一个HTML表单中的数据。
根据查询结果将email 发送给一批收信者。
根据查询结果发送定制的email
信息,如帐单信息,其收信者动态地由数据库查询决定。
与邮件信息一起发送一个MIME文件附件。
CFMAIL与CFOUTPUT很相似,两者有一些相同的属性——QUERY,GROUP,STARTROW和
MAXROWS等。而CFMAIL还有一些与邮件有关的特殊属性,用于处理邮件标题信息以及
MIME文件和HTML文件等。
发送基于form的email
在下面的例子中,用户在表单中输入的咨询信息被发送到市场部:
<CFMAIL FROM="#Form.EMailAddress#"
TO="marketing@allaire.com"
SUBJECT="Customer Inquiry">
A customer inquiry was posted to our Web site:
Name: #Form.FirstName# #Form.LastName#
Subject: #Form.Subject#
#Form.InquiryText#
</CFMAIL>
发送基于查询的email
在下面的例子中,查询ProductRequest的任务是获取过去七天中对某个产品进行咨询的
客户列表。然后这个列表被加上合适的标题和脚注,发送给市场部:
<CFMAIL QUERY="ProductRequests"
FROM="webmaster@allaire.com"
TO="marketing@allaire.com"
SUBJECT="ColdFusion status report">
Here is a list of people who have inquired about
Allaire ColdFusion over the last seven days:
<CFOUTPUT>
#ProductRequests.FirstName# #ProductRequests.LastName#
(#ProductRequests.Company#) - #ProductRequests.EMailAddress#
</CFOUTPUT>
Regards,The WebMaster
webmaster@allaire.com
</CFMAIL>
注意在标准的CFMAIL信息中嵌入了一个CFOUTPUT标签,用于提供动态内容。CFOUTPUT内
的语句将对查询“ProductRequest”的查询结果中每一条记录重复执行,而CFOUTPUT上
面和下面的部分别作为邮件的标题和脚注信息。
向多个收信者发送email
在下面的例子中,查询CFBetaTesters用于获取一个正在使用ColdFusion b 测试版的用
户列表。然后根据此查询的结果向每个用户发送一个通知。告知他们b 测试版已有一个
新版本发布:
<CFMAIL QUERY="CFBetaTesters"
FROM="beta@allaire.com"
TO="#TesterEMail#"
SUBJECT="ColdFusion Beta Four Available">
To all ColdFusion beta testers:
ColdFusion Beta Four is now available for downloading
from the Allaire site.The URL for the download is:
http://beta.allaire.com
Regards,
ColdFusion Technical Support
beta@allaire.com
</CFMAIL>
在这个例子中,email信息不包含动态内容。但此信息的目标email地址是一个动态参数。
注意:TO属性中“TesterEmail”字段来自查询结果。
为多个收信者定制Email
在下面的例子中,查询“GetCustomers”用于获取一批用户的联系信息。然后查询结果
被用来向每个用户发送一个email,要求他们证实其联系信息是否仍然有效:
<CFMAIL QUERY="GetCustomers"
FROM="service@allaire.com"
TO="#EMail#"
SUBJECT="Contact Info Verification">
Dear #FirstName# -
We’d like to verify that our customer
database has the most up-to-date contact
information for your firm. Our current
information is as follows:
Company Name: #Company#
Contact: #FirstName# #LastName#
Address:
#Address1#
#Address2#
#City#, #State# #Zip#
Phone: #Phone#
Fax: #Fax#
Home Page: #HomePageURL#
Please let us know if any of the above
information has changed, or if we need to
get in touch with someone else in your
organization regarding this request.
Thanks,
Allaire Customer Service
service@allaire.com
</CFMAIL>
注意在CFMAIL的TO属性中用到了查询字段#Email#,将邮件发送到查询所得的email地址。
在CFMAIL的信息体中用到了其它查询变量(FirstName,LastName等),为不同的收信
者定制不同的邮件内容。
附带一个MIME文件
在下的例子中,一个MIME文件与email信息一起被发送:
<CFMAIL FROM="info@allaire.com"
TO="jdoe@supercomputer.com"
SUBJECT="File you requested"
MIMEATTACH="c:/cfmanual.doc">
Dear Joe,
Here is a copy of the file you requested.
Regards,
The Allaire Team
</CFMAIL>
高级选项
ColdFusion所实现的SMTP邮件使用缓冲结构。也就是说,当处理程序文件中的CFMAIL标
签时,并不立即发送邮件,而是将邮件保存在硬盘上,在后台进行处理。这种结构有两
个显著的优点:
1、用户不必等待SMTP发送过程结束即可继续下面的操作。当用户的操作导致大量的邮
件发送时,这一优点特别有用。
2、用CFMAIL发送信息是可靠的,即使出现意外事故如断电,服务器死机等情况,邮件
仍可发送到目的地。
在大多数情况下,缓冲在硬盘上的邮件信息会立即被ColpFusion处理。但是,如果
ColpFusion特别忙或者已经有许多邮件等待处理,则邮件会被推迟发送。
将邮件发送为HTML
许多新的Internet邮件程序都可以读取并解释邮件信息中的HTML代码。CFMAIL标签允许
你用TYPE属性将邮件信息类型指定为HTML。TYPE属性只接受HTML作为参数,用于通知客
户端软件,邮件信息中嵌有需要处理的HTML标签。只有客户端软件可以解释HTML代码时,
这一特性才有用处。
覆盖缺省的SMTP服务器设置
你可以用下表所列的可选CFMAIL属性覆盖ColdFusion
Administrator中的缺省SMTP服务器设置:
CFMAIL 标签
可选属性
描述
SERVER
发送邮件所使用的SMTP服务器的地址。
PORT
SMTP服务器监听请求的TCP/IP端口号,通常总是25。
TIMEOUT
与SMTP服务器连接超时的秒数。
错误日志和未发送信息
SMTP信息的处理过程中所发生的错误都被记录在文件errors.log中。错误日志中的每条
记录包含发生错误的日期和时间以及关于错误原因的诊断信息。
由于发生错误而未能发送的邮件信息被写入/cfusion/mail/undelivr目录。与未发送信
息相对应的错误日志记录中包含被写入undelivr目录的文件名。
收取邮件(CFPOP)
收取邮件(CFPOP)
CFPOP标签为ColdFusion应用程序增添了Internet邮件客户端的特性。当你想在应用程
序中收取邮件时,可以使用CFPOP。下面是可以使用CFPOP的两个实例:
·
如果你的站点有多人共用的邮箱(Sales@yourcompany.com),那么构造一个
ColdFusion前台邮件界面,为每个用户实现取信功能,将是一种有效的方法。
·
在许多应用程序中,当邮件的格式服务于特定任务时,可以利用CFPOP对邮件进行自动
处理。
CFPOP示例
这个例子演示了CFPOP标签的基本语法:
<CFPOP SERVER="my.mailserver.com"
USERNAME=#username#
PASSword=#pwd#
ACTION="GetHeaderOnly"
NAME="getmsghdrs">
<BODY>
<CFOUTPUT>
You have #getmsghdrs.RecordCount# messages to read.
</CFOUTPUT>
<CFOUTPUT QUERY="getmsghdrs">
<P><B>Date: </B>#getmsghdrs.date#</P>
<P><B>From: </B>#getmsghdrs.from#</P>
</CFOUTPUT>
</BODY>
使用CFPOP
在ColdFusion应用程序中实现CFPOP标签的步骤如下:
1、选择要在ColdFusion应用程序中访问的邮箱。
2、确定你需要处理哪些邮件信息部件:信息标题,信息体,附件等。
3、决定是否需要将邮件信息保存到数据库中。
4、决定在收取邮件后是否从POP服务器上删除该邮件。
5、在应用程序中利用CFPOP标签建立访问指定邮箱的用户界面。
6、建立一个用于输出处理的程序文件。收取的信息中可以包含浏览器不能正确显示的
ASCII字符。
在CFOUTPUT标签中可以用函数HTMLCodeFormat和HTMLEditFormat来控制浏览器的输出显
示。在后面的例子中要注意这两个函数的使用。
CFPOP查询变量
对每个CFPOP查询,都将返回两个变量:
· RecordCount:查询结果的记录总数。
· CurrentRow:在CFOUTPUT循环中正在处理的当前记录。
你可以在CFOUTPUT中引用这些变量,只需以查询名作为变量名的前缀。查询名即CFPOP
的NAME属性的值。例如:
<CFOUTPUT>
This operation returned #Sample.RecordCount# messages.
</CFOUTPUT>
处理POP邮件
处理POP邮件
CFPOP的ACTION属性用来指定要获取什么数据。你可以获取所有数据(GetA11),只获
取标题数据(GetHeaderOnly),或者删除邮件(DELETE)。后面将给出几个例子。注
意要使下面的例子能成功运行,你需要以一个合法的用户名和密码引用某个有效的POP
服务器。
只返回信息标题
使用CFPOP标签时,若ACTION=“GetHeaderOnly”,则ColdFusion只将邮件的标题信息
返回到NAME属性所指定的查询中。标题信息有下面几种:
· DATE
· FROM
· MESSAGENUMBER
· REPLYTO
· SUBJECT
· CC
· TO
标题信息
CFPOP所返回的邮件标题有可能被括在HTML代码中。你可以用ColdFusion函数HTMLCode
Format将HTML标签转换为替代字符,例如用“>”表示“>”,用“&Lt”
表示“<”。
另外,CFPOP返回的日期值可以用函数ParseDateTime进行处理,该函数将POP日期时间
对象转换为GMT(格林威治时间)。
你可以在CFOUTPUT中引用这些标题,如下例所示:
<CFOUTPUT>
#ParseDateTime(queryname.date, "POP")#
#HTMLCodeFormat(queryname.from)#
#HTMLCodeFormat(queryname.messagenumber)#
</CFOUTPUT>
例子:获取邮件标题
用户可以从POP服务器获取或删除邮件信息,下面的例子文件holronly.cfm演示了如何
获取邮件的标题信息:
例子文件:
hdronly.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Header Example</TITLE>
</HEAD>
<BODY>
<H2>This example retrieves message
header information:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="GetHeaderOnly"
NAME="Sample">
<CFOUTPUT QUERY="Sample">
MessageNumber: #HTMLEditFormat(Sample.MESSAGENUMBER)# <BR>
To: #HTMLEditFormat(Sample.TO)# <BR>
From: #HTMLEditFormat(Sample.FROM)# <BR>
Subject: #HTMLEditFormat(Sample.SUBJECT)# <BR>
Date: #HTMLEditFormat(Sample.DATE)# <BR>
Cc: #HTMLEditFormat(Sample.CC)# <BR>
ReplyTo: #HTMLEditFormat(Sample.REPLYTO)# <BR>
</CFOUTPUT>
</BODY>
</HTML>
返回整个邮件
使用CFPOP时指定ACTION=“GetA11”,ColdFusion除了返回与GetHeaderOnly
相同的字段外,还返回另外两个字段,BODY和HEADER。
在下面的例子文件hdrbody.cfm中,ACTION属性被设为“GetA11”,因此它将获取邮件
的标题和信息体。
例子文件: hdrbody.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Body Example</TITLE>
</HEAD>
<BODY>
<H2>This example adds retrieval of
the message body:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="GetAll"
NAME="Sample">
<CFOUTPUT QUERY="Sample">
MessageNumber: #HTMLEditFormat(Sample.MESSAGENUMBER)# <BR>
To: #HTMLEditFormat(Sample.TO)# <BR>
From: #HTMLEditFormat(Sample.FROM)# <BR>
Subject: #HTMLEditFormat(Sample.SUBJECT)# <BR>
Date: #HTMLEditFormat(Sample.DATE)# <BR>
Cc: #HTMLEditFormat(Sample.CC)# <BR>
ReplyTo: #HTMLEditFormat(Sample.REPLYTO)# <BR>
Body: #HTMLCodeFormat(Sample.BODY)# <BR>
Header: #HTMLCodeFormat(Sample.HEADER)# <BR>
</CFOUTPUT>
</BODY>
</HTML>
返回附件
若ACTION属性设置为“GetA11”,并同时指定ATTACHMENTPATH属性,则ColdFusion返回
两个额外的字段:
· ATTACHMENTS——包含一列附件源的名字,以制表符为分隔符。
· ATTACHMENTFILES——包含实际写入服务器的一列临时文件名:以制表符为分
隔符。
你可以用CFFILE标签删除这些临时文件。
并非所有的邮件都带有附件。如果一个邮件没有附件,则ATTACHMENTS属性和
ATTACHMENTFILES属性均为一空字符串。
处理附件文件名
为避免文件重名所带来的问题,ColdFusion为所有的附件建立临时文件。如果你收取的
邮件带有附件,你可以用ATTACHMENTPATH属性选择附件的保存位置。应用程序开发者的
任务是管理这些文件,使对它们的访问不会混淆。
程序开发者还应注意清除CFPOP标签执行时所产生的临时文件。
下面的例子文件attch.cfm返回包括附件在内的邮件信息的所有内容:
例子文件: attach.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Attachment Example</TITLE>
</HEAD>
<BODY>
<H2>This example retrieves message header,
body, and all attachments:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="GetAll"
ATTACHMENTPATH="c:/attachdir"
NAME="Sample">
<CFOUTPUT QUERY="Sample">
MessageNumber: #HTMLEditFormat(Sample.MESSAGENUMBER)# <BR>
To: #HTMLEditFormat(Sample.TO)# <BR>
From: #HTMLEditFormat(Sample.FROM)# <BR>
Subject: #HTMLEditFormat(Sample.SUBJECT)# <BR>
Date: #HTMLEditFormat(Sample.DATE)# <BR>
Cc: #HTMLEditFormat(Sample.CC)# <BR>
ReplyTo: #HTMLEditFormat(Sample.REPLYTO)# <BR>
Attachments: #HTMLEditFormat(Sample.ATTACHMENTS)# <BR>
Attachment Files: #HTMLEditFormat(Sample.ATTACHMENTFILES)# <BR>
Body: #HTMLCodeFormat(Sample.BODY)# <BR>
Header: #HTMLCodeFormat(Sample.HEADER)# <BR>
</CFOUTPUT>
</BODY>
</HTML>
删除邮件
缺省情况下,收取邮件时并不将邮件从POP服务器上删除,如果你想删除已收取的邮件,
则必须将ACTION属性设为“Delete”。
CFPOP返回的MESSAGENUMBER变量包含了你需要送回到POP服务器的邮件序号,该序号指
明要删除哪个邮件。应注意的是:
·
一旦删除了一个邮件,就无法恢复它。
· 每次对POP服务器执行完一个Delete操作后,邮件序号就会被重新分配。例如,
如果从POP服务器收取了四个邮件,返回的邮件序号为1,2,3,4。如果随后在一个
CFPOP标签内删除了两个邮件,则邮件3和邮件4会分别被分配给序号1和2。
例子:删除邮件
例子文件: msgdel.cfm
<HTML>
<HEAD>
<TITLE>POP Mail Message Delete Example</TITLE>
</HEAD>
<BODY>
<H2>This example deletes messages:</H2>
<CFPOP SERVER="mail.company.com"
USERNAME=#username#
PASSword=#password#
ACTION="Delete"
MESSAGENUMBER="1,2,3">
</BODY>
</HTML>