#12002/4/30 9:23:54
有人说ColdFusion是一种傻瓜式的编程语言。如果不理会ColdFusion简单易用的表面掩盖下的强大、复杂的技术特性的话,这是有一定道理的。从ColdFusion发送电子邮件这个典型应用可以很好的体现这一点。
我们先看看用ColdFusion发送电子邮件的基本语句,真的相当简单。
<cfmail from=″ColdFusion爱好者″
to=″westwind@i51.net″
subject=″你好″
server=″smtp.mail.com″>
hi,你好,我是westwind!
</cfmail>
该例演示的是发送一封静态电子邮件,其中<cfmail></cfmail>就是发送电子邮件的CFML标签,from参数是发送者,to是发送目标,subject顾名思义就是邮件主题,server是发送邮件的smtp服务器。
在实际应用中,更多情况下我们是通过从数据库中提取信息来批量发送成千上万封电子邮件,且这些电子邮件的内容、主题等都可能各不相同,这就是我们说的“动态电子邮件”。下面是一个简单的示例,假设我们已经建立了一个储存有用户名、用户E-mail信息的数据库表userbase。
<cfquery datasource=″DSN″ name=″testmail″>
select username,email from userbase
</cfquery>
这是使用<cfquery></cfquery>标签嵌入一个SQL查询语句来建立的查询,相当于ASP、PHP等编程语言中从定义对象、建立服务器连接、选择数据库、执行SQL查询到返回记录集(recordset)句柄的全部过程,是否非常简单呢?
然后用<cfmail>标签来循环生成所有的电子邮件。
<cfmail query=″testmail″ from=″myemail@mail.com″ to=″#email#″ subject=″给#username#的电子邮件″ server=″smtp.mail.com″>
<!--- 下面是邮件内容,收件人名字是从数据库中提取 --->
#username#,你好!
很高兴认识你!
<!--- 邮件内容结束 --->
</cfmail>
程序运行至此,ColdFusion会自动在/mail/spool/目录下生成许多形式如*.email格式的文件,这些就是临时邮件文件,ColdFusion会利用服务器间隙自动扫描并发送这些邮件而无需用户等待,如果遇到网络问题(如服务器拒绝发送某个可能写了不合格地址的电子邮件),未能发送的邮件被转移到/mail/undelivr目录里,只要把该目录里的文件移动到/mail/spool目录里,Coldfusion又会将它们作为新邮件发送了。
也许你会问,ColdFusion是否支持文件附件,是否支持HTML格式的电子邮件呢?答案是肯定的。实现也很简单,如发送邮件附件,只需要在标签里再加入mimeattach=″path″即可,如果有多个附件,则需要用分号分隔开如mimeattach=″path1;path2;″。
发送HTML格式电子邮件方法也类似,在<cfmail>里加入属性定义 type=″html″ 即可。
如果你使用的是ColdFusion4.0版本,由于ColdFusion 发送HTML格式邮件默认的代码是US-ASCII,因此如果你发送中文HTML邮件的话会显示成乱码,接收者需要手工转换代码才能阅读,这当然很不方便。彻底的解决方式是,用某种支持2进制代码的编辑软件,如WinHex打开cfserver.exe文件,查找“US-ASCII”字串,替换成“GB2312”。但是“GB2312”比“US-ASCII”少了两位字符,由于编译过的可执行文件的长度发生变化会使得程序无法运行,所以还要在“GB2312”后面用回车换行符补齐“0D 0A”就OK了。最新的ColdFusion Server 4.5.1版本似乎不存在这个问题。