用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>

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 }

welcome.htm:

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

<over>

时间: 2024-08-26 12:23:39

用PHP Email发送表单内容(10)- 发送邮件的相关文章

用PHP Email发送表单内容(7)- 如何防止非法内容的输入?

这一节主要由这些内容: 1.判断用户输入的内容是否合法?(用正则表达式,这个需要掌握): 2.如果用户输入的内容不合法,请显示相应的警告信息,并且停止之后的操作: 这里以防止email inject header为例: 首先看看完成之后的完整的代码: form.php: 1 <?php 2 $missing = array();//用于存储用户没有填写的信息: 3 $error = array();//用于存储用户填写错误的信息: 4 //具体如何识别没有填写或者填写错误的信息,然后把它们存储到

用PHP Email发送表单内容(3)-根据用户的输入显示错误信息

这一节内容不多,主要由两个地方需要注意: 1.用in_array判定一个变量是否在一个数组中,这是我们判定某一个表单上会否输入或者有错的依据: 2.PHP的条件语句可以可以被<?php ?>标签分隔开来,也就是说首位在不同的标签中,中间部分依然会当做条件语句的一部分,只有判定为true的时候才会显示或者执行. 看一段代码: 1 <?php 2 $missing = array();//用于存储用户没有填写的信息: 3 $error = array();//用于存储用户填写错误的信息: 4

用PHP Email发送表单内容(9)- Buliding the message body

这一节只有一个内容,就是用用户填写的内容自动生产我们的邮件内容,当然还要进行一系列的判定. 邮件主题的内容,是由下面这段代码实现的,看里面的注释就可以理解了: 1 if(!$suspect && !$missing && !$errors){//如果出现以上情况,我们不希望这个程序运行: 2 $message = ''; //先建立$message以后再慢慢的往里面加内容; 3 foreach($expected as $item){ //谨慎起见,我只希望希望的内容出现在

用PHP Email发送表单内容(3)-mail()函数的几个参数详解

这一节主要讲的是mail函数. 首先阅读手册,看看mail函数的基本形式:http://php.net/manual/en/function.mail.php mail();函数接受几个参数: 第一个参数:收件人 $to = ‘[email protected]’; 或者我们有多个收件人: $to = ‘[email protected]’,’[email protected]’; 或者我们还可以加上收件人的名字: $ = ‘david <[email protected]>,james &l

用PHP Email发送表单内容(5)-如何保存用户已经输入的正确信息?

用户输入的信息 ,我们已经通过$$key这个东西将用户的输入存储起来了 ,即我们得到了$name,$email,$comment这些信息.我们现在要做的就是在用户点击submit btn之后将这些信息赋给input的value,或者在textare中显示出来. 为了防止用户输入的某些数值显示出错,需要用到htmlentites函数(点击查看详情). 方法其实很简单,看下面的代码: 1 <input type="text" name="name" id=&quo

用PHP Email发送表单内容(2)-如何去除不必要的反斜线?(magic_quotes_gpc)

这一节的主要内容比较简单,就是去除不必要的反斜线. 其实这是个历史遗留问题,以前PHP为了方便初学者而加入的内容,但是后来发现它造成了更多的问题,而且在现在的语言当中已经被抛弃了 This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0. 扩展阅读:http://php.net/manual/en/security.magicquotes.php(官方手册) 只要知道两种关闭magic_quotes_

js控制select选中显示不同表单内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

webform快速创建表单内容文件--oracle 数据库

使用方法 前台页面这样写就足够了 <form class="stdform" runat="server"> <div id="field_tab_content" runat="server"></div> </form> 新增编辑加载页面(改页面需要继承CreateModel类) Type type; public decimal id = 0; protected void

vue+element-ui 实现重置表单内容

今天在做入院管理的时候,需要实现表单内容以及验证信息的重置,具体效果如下: 当我再点击添加添加住院患者按钮打开表单时,应该是这个样子的: 根据Element-UI官方文档提供的方法,我们可以使用这个函数: resetForm(formName) { this.$refs[formName].resetFields(); } 实际使用的时候代码: this.visible = true; this.resetForm('form'); 先显示对话框,再重置表单,如果这两行代码顺序颠倒,点击添加住院