在网站建设过程当中经常需要提供一些表格,根据用户的选择将用户信息转发至不同的e-mail中。 单独转发一个e-mail比较简单,在网上也有许多用PERL语言编制的程序,但一次根据情况转发至不同的e-mail则相对较难,我这段时间刚好需要,所以用PHP编写了这个程序,使用情况良好,所以提供给大家共享。
PHP处理程序如下:
// purpose: transformming email
// author: pengwu wang
// date: Oct. 21,2003
/*用send-form.php要求的字段的说明:
form中method 用 post
namex, 用户名
title, 显示的标题
from, 从那儿送过来,缺省test@test.com
urlto, 是完成以后显示的页面, 缺省取为空,即在原网页不动,有一个提示框显示,否则转至要求的网页
cc, 密送的邮箱地址,缺省取test@test.com
sendto_name, 要替换sendto或sendto[]的名称, sendto缺省用'sendto',sendto[]缺省用'发送至'
namex_name, 要替换namex的名称, 缺省用namex
sendto, 要发送至单独一个email的项
或
sendto[], 要发送至多个email的项, 对每一个checkbox,radio按钮,其name写sendto[]=......
email_1,
email_2,
email_3,
email_4,
......, 根据sendto[]值发向不同地的email地址值. 此处的1,2,3,4等要换成与sendto[]所选值完全相等
如:email_测试1=test1@test.com, email_测试2=test2@test.com
则sendto[]项最后可取的值应为: 测试1,测试2
对于表单中不需要的字段应以hidden方式发送;
namex,title,sendto,或sendto[]是必须填写的. 当为sendto[]时email_*值必须写. 其它的可以不写
除sendto[]外,其它的name不能重复,因为不好判断其组别关系.
*/
//此6个变量先取出来是为了方便
$from=$_POST[from];
$cc=$_POST[cc];
$urlto=$_POST[urlto];
$sendto=$_POST[sendto];
$sendto_name=$_POST[sendto_name];
$namex_name=$_POST[namex_name];
$ret=false;
if(!is_array($sendto) %26amp;%26amp; !empty($sendto)) $ret=true;
if(is_array($sendto)) { //多邮件发送
reset($sendto);
while(list($k,$v)=each($sendto)) {
if(isset($k) %26amp;%26amp; isset($v)) {
$ret=true;
break;
}
}
}
if(!$ret) {
echo("
");
exit; //所给的邮件地址都为空
}
$subject .= $_POST[title]." - ".$_POST[namex];
$body = "";
$body .= $subject."
";
$body .= "填表日期 : ".date("Y年m月d日",time())."
";
$body .= "----------------------------------------
";
$body .= " ";
reset ($_POST);
while (list ($key, $val) = each ($_POST)) {
if(ereg("^email_.*",$key)) continue;
else if(strcmp($key,"title")==0) continue;
else if(strcmp($key,"cc")==0) continue;
else if(strcmp($key,"from")==0) continue;
else if(strcmp($key,"urlto")==0) continue;
else if(strcmp($key,"sendto_name")==0) continue;
else if(strcmp($key,"namex_name")==0) continue;
else if(strcmp($key,"sendto")==0 %26amp;%26amp; !is_array($key) %26amp;%26amp; empty($val)) continue;
$body .= " ";
if(strcmp($key,"sendto")==0 %26amp;%26amp; is_array($sendto)) {
reset($sendto);
while(list($k,$v)=each($sendto)) {
if(isset($sendto_name) %26amp;%26amp; !empty($sendto_name))
$body .= " $sendto_name
$v
";
else
$body .= " 发送至
$v
";
$body .= "";
}
} else {
if(strcmp($key,"sendto")==0)
$body .= " $sendto_name
$val
";
else if(strcmp($key,"namex")==0)
$body .= " $namex_name
$val
";
else
$body .= " $key
$val
";
$body .= "";
}
}
$body .= "";
if(!is_array($sendto) %26amp;%26amp; !empty($sendto)) { //单邮件
$to = $sendto;
}
else if(is_array($sendto)) { //多邮件 ;
reset($sendto);
$to="";
while (list ($k, $v) = each ($sendto)) {
$e="email_".$v;
$e=trim($e);
if(isset($_POST[$e])) $to .= "$_POST[$e],";
}
if(substr($to,-1)==',') $to=substr($to,0,strlen($to)-1);
}
$body .= " REMOTE IP : ".$REMOTE_ADDR;
$body .= "";
if(!isset($from) empty($from)) $from="test@test.com";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=gb2312\r\n";
$headers .= "From: ".$from."\r\n";
if(!isset($cc) empty($cc)) {
$cc="test@test.com";
}
$headers .= "Bcc: ".$cc."\r\n";
mail($to, $subject, $body, $headers);
if(isset($urlto) %26amp;%26amp; !empty($urlto)) {
header("Location: $urlto");
} else {
echo("
");
}
?
假设PHP处理程序名为send-form.php,存放在网上的主页下,则一个简单的HTML测试程序如下,供大家参考:
,