首页 > 代码库 > 用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>
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 }
welcome.htm:
1 <h1>消息已经发送成功,我将尽快和您联系!</h1>
<over>
用PHP Email发送表单内容(10)- 发送邮件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。