用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‘);//新认识的函数,header
5         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 = ‘[email protected];
  7     $subject = ‘来自留言本的反馈‘;
  8     $expected = array(‘name‘,‘email‘,‘comment‘);
  9     $required = array(‘name‘,‘email‘,‘comment‘);
 10     $headers = "From: [email protected]\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="‘. 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="‘. 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="提交评论"></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 mail
55         $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>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。