首页 > 代码库 > 用PHP Email发送表单内容(10)- 发送邮件

用PHP Email发送表单内容(10)- 发送邮件

这一节的内容是发送邮件,有以下几点需要注意:

1、mail函数的格式,各个参数的格式;

2、发送成功之后,应该给用户怎样的反馈?

3、如果没有发送成功,改给用户什么样的反馈?


 

主要是增加了下面这些代码:

mail_process.php

1     $mailSended = mail($to ,$subject, $message, $headers, $authenticate);//这里直接换做mail函数2     if(!$mailSended){3         $errors[‘mailfail‘] = true;    //如果发送失败了,我们将用这里的布尔值决定是否向用户展示信息。4         //别以为你所有的函数都设置好了,后面的就肯定可以成功,对最后的结果还是要有验证的。5     }

form.php:

1     $authenticate = null;2     require ‘mail_process.php‘;3     if($mailSended){4         header(‘Location: welcome.htm‘);//新认识的函数,header5         exit;6     }
 1 <?php if(($_POST && $suspect) ||($_POST && isset($errors[‘mailfail‘]))){ ?> 2             <p class="waring">消息无法发送成功</p> 3          4         <?php  5             }elseif($missing || $errors){ 6         ?> 7                 <p class="waring">你没有按要求填写表单,请按要求填写</p> 8         <?php 9         }10         ?>

 

到目前为止,这个发送表格的课程全部学完了,一下是完整的代码:

form.php:

  1 <?php  2 $missing = array();//用于存储用户没有填写的信息;  3 $errors = array();//用于存储用户填写错误的信息;  4 //具体如何识别没有填写或者填写错误的信息,然后把它们存储到相应的数组中?这是另一节的内容了。  5 if(isset($_POST[‘send‘])){  6     $to = ‘wangjianhua@example.com‘;  7     $subject = ‘来自留言本的反馈‘;  8     $expected = array(‘name‘,‘email‘,‘comment‘);  9     $required = array(‘name‘,‘email‘,‘comment‘); 10     $headers = "From: webmaster@example.com\r\n"; 11     $headers .= "Content-Type: text/plain;charset-utf-8"; 12     $authenticate = null; 13     require ‘mail_process.php‘; 14     if($mailSended){ 15         header(‘Location: welcome.htm‘);//新认识的函数,header 16         exit; 17     } 18 } 19 ?> 20 <html> 21     <head> 22         <meta charset="utf-8"> 23         <title>联系我们</title> 24         <style> 25             input,label,textarea{ 26                 display:block; 27                 margin:1em; 28             } 29             textarea{ 30                 width:400px; 31                 height:200px; 32             } 33             .waring{ 34                 color:red; 35                 font-weight:bold; 36             } 37         </style> 38     </head> 39      40     <body> 41         <h1>留言本</h1><!-- 这里添加一个标题,其实是无关紧要的 --> 42         <?php if(($_POST && $suspect) ||($_POST && isset($errors[‘mailfail‘]))){ ?> 43             <p class="waring">消息无法发送成功</p> 44          45         <?php  46             }elseif($missing || $errors){ 47         ?> 48                 <p class="waring">你没有按要求填写表单,请按要求填写</p> 49         <?php 50         } 51         ?> 52         <form method="post" action=‘<?php echo($_SERVER[‘PHP_SELF‘]); ?>‘;> 53              54             <label>姓名: 55                 <?php if($missing && in_array(‘name‘, $missing)){ ?> 56                     <span class="waring">你没有填写名字!</span> 57                 <?php } ?> 58                  59             </label> 60             <input type="text" name="name" id="name" 61             <?php 62                 if( $errors || $missing ){ 63                     echo ‘value="http://www.mamicode.com/‘. htmlentities($name,ENT_COMPAT,‘utf-8‘) . ‘"‘;//原来只有$name,现在加入了htmlentites函数 64                 } 65             ?>></input> 66              67             <label>邮箱地址: 68             <?php 69                     if($missing && in_array(‘email‘,$missing)){ 70                 ?> 71                     <span class="waring">你没有填写邮箱地址!</span> 72                 <?php }elseif(isset($errors[‘email‘])){ 73                 ?> 74                     <span class="waring">您填写的邮箱地址格式不合法!</span> 75                 <?php } ?> 76              77             </label> 78             <input type="text" name="email" id="email" 79              80             <?php 81                 if( $errors || $missing ){ 82                     echo ‘value="http://www.mamicode.com/‘. htmlentities($email,ENT_COMPAT,‘utf-8‘) . ‘"‘; 83                 } 84             ?> 85              86             ></input> 87              88             <label>评论: 89             <?php 90                     if($missing && in_array(‘comment‘,$missing)){ 91                 ?> 92                     <span class="waring">你没有填写评论</span> 93                 <?php } ?> 94                  95                 <?php 96                     if($errors && in_array(‘comment‘,$errors)){ 97                 ?> 98                     <span class="waring">您填写的评论格式不合法!</span> 99                 <?php } ?>100             101             </label>102             <textarea name="comment" id="comment"><?php //textarea的开始符和PHP的开始符之间不要有空格,要不然会页面中显出出来。103                 if($missing || $errors){104                     echo htmlentities($comment,ENT_COMPAT,‘utf-8‘);105                 }106             ?></textarea> <!-- 同样的textarea的结束符也是和PHP的结束符之间不要有空格。 -->107             108             <input type="submit" name="send" id="send" value="http://www.mamicode.com/提交评论"></submit>109         </form>110         111     </body>112 </html>
View Code

 

mail_process.php:

 1 <?php 2 $suspect = false; 3 $pattern = ‘/Content-Type:|Bcc:|Cc:/i‘; 4  5 function isSuspect($val,$pattern,&$suspect) { 6     if(is_array($val)){//如果$val是数组,我们就遍历整个数组,将将每个value找出来赋值给$item; 7         foreach($val as $item){//这就是传说中的递归? 8             isSuspect($item,$pattern,$suspect); 9         }10     }else{11         if(preg_match($pattern,$val)){12             $suspect = true;13         }14     }15 }16 17 isSuspect($_POST,$pattern,$suspect);18 19 if(!$suspect){20     foreach($_POST as $key => $value){21         $temp = is_array($value) ? $value :trim($value); //判定用户的输入是不是一个数组;22         if(empty($temp) && in_array($key,$required)){23             $missing[] = $key;//如果输入是空的,就把它放到$missing的数组里面;24             $$key = ‘‘;//并且把空值赋给$$key;25         }elseif(in_array($key,$expected)){26             $$key = $temp;//如果不是空的,而且还是我们想要的$expece,那就把它的值赋给$$key,所以说$$key有可能是个数组了。27         }28     }29 }30 31 32 if(!$suspect && !empty($email)){33     //这里是过滤用户输入的email地址,如果符合email地址格式,就赋值给$validemail,如果不是email地址,则返回false,即$validemail = false;34     $validemail = filter_input(INPUT_POST,‘email‘,FILTER_VALIDATE_EMAIL); //这里email是数组INPUT_POST的key,不用$35     if($validemail){36         $headers .= "\r\nReply-to: $validemail";37     }else{38         $errors[‘email‘] = true;39     }40 }41 42 if(!$suspect && !$missing && !$errors){//如果出现以上情况,我们不希望这个程序运行;43     $message = ‘‘;                        //先建立$message以后再慢慢的往里面加内容;44     foreach($expected as $item){        //谨慎起见,我只希望希望的内容出现在邮件主题中45         if(isset($$item) && !empty($$item)){46             $val = $$item;                //variable variable,具体到实例,就是$val = $name/$val = $email等;47         } else {48             $val = ‘没有选中‘;            //这个基本上不会出现,因为前面$missing和$errors都已经验证过了。49         }50         51         if(is_array($val)){                //处理输入值是数组的情况52             $val = implode(‘, ‘,$val);53         }54         $item = str_replace(array(‘_‘,‘-‘),‘ ‘,$item);//去除掉下划线或者短横线,如果e-mail会变成e mail55         $message .= ucfirst($item) . ": $val\r\n\r\n";//首字母变大写,这些都是小处理,可以在完成大的逻辑之后慢慢补充这些内容56     }57         $message = wordwrap($message,70);//这是邮件的要求,单行不能超过70个字符;58     59     60     //$message = ‘这里是message的全部内容‘;61     $mailSended = mail($to ,$subject, $message, $headers, $authenticate);//这里直接换做mail函数62     if(!$mailSended){63         $errors[‘mailfail‘] = true;    //如果发送失败了,我们将用这里的布尔值决定是否向用户展示信息。64         //别以为你所有的函数都设置好了,后面的就肯定可以成功,对最后的结果还是要有验证的。65     }66 }
View Code

 

welcome.htm:

 1 <h1>消息已经发送成功,我将尽快和您联系!</h1> 

 

<over>

用PHP Email发送表单内容(10)- 发送邮件