用PHP编制邮件转发通用程序
长沙北大青鸟作者:科泰校区佚名
摘要: 在网站建设过程当中经常需要提供一些表格,根据用户的选择将用户信息转发至不同的e-mail中。 单独转发一个e-mail比较简单,在网上也有许多用PERL语言编制的程序,但一次根据情况转发至
在网站建设过程当中经常需要提供一些表格,根据用户的选择将用户信息转发至不同的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) && !empty($sendto)) $ret=true; if(is_array($sendto)) { //多邮件发送 reset($sendto); while(list($k,$v)=each($sendto)) { if(isset($k) && 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 && !is_array($key) && empty($val)) continue; $body .= " "; if(strcmp($key,"sendto")==0 && is_array($sendto)) { reset($sendto); while(list($k,$v)=each($sendto)) { if(isset($sendto_name) && !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) && !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.0rn"; $headers .= "Content-type: text/html; charset=gb2312rn"; $headers .= "From: ".$from."rn"; if(!isset($cc) empty($cc)) { $cc="test@test.com"; } $headers .= "Bcc: ".$cc."rn"; mail($to, $subject, $body, $headers); if(isset($urlto) && !empty($urlto)) { header("Location: $urlto"); } else { echo(" "); } ?> 假设PHP处理程序名为send-form.php,存放在网上的主页下,则一个简单的HTML测试程序如下,供大家参考: 测试表格姓名:我要去:北京的学校我要去:上海的学校我要去:西安的学校