开发者社区


项目管理 | IT/商务管理 | 职涯
首页 - 管理和职涯
管理&职涯
全文搜索:   

用PHP发电子邮件
作者:
2001-08-28 17:56:33



mail()函数是非常简单的:只有五个参数,而其中的两个是可选的.这些参数是:

  • 接收方地址
  • 主题
  • 信件内容
  • 其它文件信息头(可选)
  • SMTP服务程序的其它配置选项(可选)


附加的头参数控制了诸如CC, BCC, Reply-To之类的邮件功能,或者其它遵循SMTP协议的功能.在这个例子中,我只使用From 和 Reply-To信息头.

如果你想给我发邮件但你使用的是一个非Windows系统, 程序代码就应该如下:

<?
$to = "julie@thickbook.com";
$subject = "ZDNet Developer article";
$msg = "I completely understand SMTP servers now!";
$headers = "From: me@mycompany.com Reply-To: someoneelse@mycompany.com";
$config = "-fwebmaster@mycompany.com";
mail("$to", "$subject", "$msg", "$headers", "$config");
echo "finished!";
?>

如果你使用的是一个基于Windows的SMTP服务,那么你有可能不需要使用第五个参数,而且在附加的头信息参数中(也就是第四个参数),你需要将它们分开写--使用 而不是 .所以,同样的一个邮件通过基于Windows的SMTP服务发送的代码如下:

<?
$to = "julie@thickbook.com";
$subject = "ZDNet Developer article";
$msg = "I completely understand SMTP servers now!";
$headers = "From: me@mycompany.com Reply-To: someoneelse@mycompany.com";
mail("$to", "$subject", "$msg", "$headers");
echo "finished!";
?>


脚本中的echo语句使你的Web浏览器在脚本运行完成的时候向你显示一条信息.如果不写echo语句,你就会得到一个"空文件"的对话框,因为没有任何输出能够发送到浏览器端.

只要能够连接到指定的SMTP服务器mail()函数就会返回真值.但是这并不意味着邮件成功的到达了接收方那里.mail()函数不会等待或报告SMTP服务器发来的成功/错误代码.

mail()函数有可能返回假值,然后给你警告"无法连接,在第x行"或是"未知的错误,在第x行."如果这两条信息中的任何一条出现了,你就应该检查php.ini中的SMTP值.引起这些消息有两种可能:SMTP服务器瘫痪了,或者PHP无法连接到它.无论是这两种情况中的哪一种,你的邮件都无法被发送出去.

这个脚本对这些参数使用硬编码的值.使用一个简单的HTML表单,你就可以在这些参数中插入一些值并拥有一个良好的反馈表单.

一旦你知道了如何给一个人发送邮件,你可能按奈不住要把同一个邮件发送给许多接收者--就象新闻信件一样.所有这些牵涉到一个漂亮轻巧的循环来遍历一个接收者的列表并将邮件发送给他们.mail函数的形式还是相同的:

mail([接收方], [主题], [邮件主体], [头信息]);

你只需要简单的用列表中的下一个名字来替换[接收方].假设你已经有了一个电子邮件地址的数组:

$addresses = array("me@mycompany.com", "you@yourcompany.com", "someone@otherplace.com");

你所需要做的就是循环遍历这个数组,取得新地址而后发送这个邮件.

如果你在数据库中拥有一个电子邮件地址的列表,同样的原则也是适用的:循环遍历它们.

你已经懂得要领了.显然,同样的概念对你特定的数据库类型和表结构来说也是适用的,虽然代码会需要做一些改动.

人们在循环遍历一个地址列表的时候似乎都忽视了一点:如果你有多于50个地址要处理,你的脚本在完成以前很可能超时,因为PHP对每一个脚本的运行有一个缺省为30秒的时间限制.你可以修改这个时间限制但是这样做的时候要小心.要把这种修改限定在特定的脚本上,比方说遍历一个地址列表发送邮件的脚本.否则,你可能亲手将服务器的线程超载,然后你的计算机将崩溃,从此万劫不复.

要在脚本中设置时间限制,你可以使用set_time_limit()函数.你可以设定时间限制,比如说60秒(set_time_limit(60)),或者你还可以让它一直运行直道它完成(set_time_limit(0)).

将这段代码加到你的脚本里,你的邮件地址遍历循环会很愉快的继续工作,直到邮件被发送给了列表中所有的地址.

【上一页】 【下一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号