PHP学习(9)-Email

来源:互联网 发布:栅格数据是什么意思 编辑:程序博客网 时间:2024/06/11 13:50

1.mail() 函数

PHP mail() 函数用于从脚本中发送电子邮件。
语法:mail(to,subject,message,headers,parameters)
参数 :
to 必需。规定 email 接收者。
subject 必需。规定 email 的主题。注释:该参数不能包含任何新行字符。
message 必需。定义要发送的消息。应使用 LF (\n) 来分隔各行。
headers 可选。规定附加的标题,比如 From、Cc 以及 Bcc。应当使用 CRLF (\r\n) 分隔附加的标题。
parameters 可选。对邮件发送程序规定额外的参数。

注释:PHP 需要一个已安装且正在运行的邮件系统,以便使邮件函数可用。所用的程序通过在 php.ini 文件中的配置设置进行定义。可参考:http://www.w3school.com.cn/php/php_ref_mail.asp。
运行时配置
邮件函数的行为受 php.ini 的影响。
Mail 配置选项
名称 默认 描述 可更改

SMTP    "localhost" Windows 专用:SMTP 服务器的 DNS 名称或 IP 地址。 PHP_INI_ALLsmtp_port   "25"    Windows 专用:SMTP 端口号。自 PHP 4.3 起可用。  PHP_INI_ALLsendmail_from   NULL    Windows 专用:规定从 PHP 发送的邮件中使用的 "from" 地址。 PHP_INI_ALLsendmail_path   NULL    Unix 系统专用:规定sendmail 程序的路径(通常 /usr/sbin/sendmail 或 /usr/lib/sendmail)   PHP_INI_SYSTEM

2.简易 E-Mail

通过 PHP 发送电子邮件的最简单的方式是发送一封文本 email。
在下面的例子中,我们首先声明变量(to,subject, message,from, $headers),然后我们在 mail() 函数中使用这些变量来发送了一封 e-mail:

<?php$to = "someone@example.com";$subject = "Test mail";$message = "Hello! This is a simple email message.";$from = "someonelse@example.com";$headers = "From: $from";mail($to,$subject,$message,$headers);echo "Mail Sent.";?>

3.Mail Form

通过 PHP,您能够在自己的站点制作一个反馈表单。下面的例子向指定的 e-mail 地址发送了一条文本消息:

<html><body><?phpif (isset($_REQUEST['email']))//if "email" is filled out, send email  {  //send email  $email = $_REQUEST['email'] ;   $subject = $_REQUEST['subject'] ;  $message = $_REQUEST['message'] ;  mail( "someone@example.com", "Subject: $subject",  $message, "From: $email" );  echo "Thank you for using our mail form";  }else//if "email" is not filled out, display the form  {  echo "<form method='post' action='mailform.php'>  Email: <input name='email' type='text' /><br />  Subject: <input name='subject' type='text' /><br />  Message:<br />  <textarea name='message' rows='15' cols='40'>  </textarea><br />  <input type='submit' />  </form>";  }?></body></html>

例子解释:
首先,检查是否填写了邮件输入框
如果未填写(比如在页面被首次访问时),输出 HTML 表单
如果已填写(在表单被填写后),从表单发送邮件
当点击提交按钮后,重新载入页面,显示邮件发送成功的消息

4.E-mail 注入

在3.的例子中,未经授权的用户可通过输入表单在邮件头部插入数据。
假如用户在表单中的输入框内加入这些文本,会出现什么情况呢?

someone@example.com%0ACc:person2@example.com%0ABcc:person3@example.com,person3@example.com,anotherperson4@example.com,person5@example.com%0ABTo:person6@example.com

与往常一样,mail() 函数把上面的文本放入邮件头部,那么现在头部有了额外的 Cc:, Bcc: 以及 To: 字段。当用户点击提交按钮时,这封 e-mail 会被发送到上面所有的地址!

防止 E-mail 注入
防止 e-mail 注入的最好方法是对输入进行验证。
下面的代码与上一节类似,不过我们已经增加了检测表单中 email 字段的输入验证程序:

<html><body><?phpfunction spamcheck($field)  {  //filter_var() sanitizes the e-mail   //address using FILTER_SANITIZE_EMAIL  $field=filter_var($field, FILTER_SANITIZE_EMAIL);  //filter_var() validates the e-mail  //address using FILTER_VALIDATE_EMAIL  if(filter_var($field, FILTER_VALIDATE_EMAIL))    {    return TRUE;    }  else    {    return FALSE;    }  }if (isset($_REQUEST['email']))  {//if "email" is filled out, proceed  //check if the email address is invalid  $mailcheck = spamcheck($_REQUEST['email']);  if ($mailcheck==FALSE)    {    echo "Invalid input";    }  else    {//send email    $email = $_REQUEST['email'] ;     $subject = $_REQUEST['subject'] ;    $message = $_REQUEST['message'] ;    mail("someone@example.com", "Subject: $subject",    $message, "From: $email" );    echo "Thank you for using our mail form";    }  }else  {//if "email" is not filled out, display the form  echo "<form method='post' action='mailform.php'>  Email: <input name='email' type='text' /><br />  Subject: <input name='subject' type='text' /><br />  Message:<br />  <textarea name='message' rows='15' cols='40'>  </textarea><br />  <input type='submit' />  </form>";  }?></body></html>

在上面的代码中,我们使用了 PHP 过滤器来对输入进行验证:
FILTER_SANITIZE_EMAIL 从字符串中删除电子邮件的非法字符
FILTER_VALIDATE_EMAIL 验证电子邮件地址