PHP:MAIL函数详解

发布时间:2008年09月16日      浏览次数:1780 次
一、介绍
mail()函数,你能用此函数发送电子邮件。
需求
为了能使用Mail函数,在你的系统中,PHP必须有编译发送二进制邮件文件的权力。如果你用其它的邮件程序,例如qmail或postfix,你必须有把握使用它们发送邮件包。PHP将首先在你的路径上寻找sendmail,于是下列各项路径: :/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib是被推荐的。同样编译PHP的使用者一定有存取二进制的sendmail权力。
安装
这些函数作为 PHP 核心的一部分,无需被安装即可使用。
运行时配置
这些函数的行为受到全局配置文件 php.ini 的影响。
表格 1. Mail基本配置选项:
名称 默认值 可改变值
SMTP "localhost" PHP_INI_ALL
smtp_port "25" PHP_INI_ALL
sendmail_from NULL PHP_INI_ALL
sendmail_path DEFAULT_SENDMAIL_PATH PHP_INI_SYSTEM
  为了更多的有关Mail的配置选项请看see ini_set()函数。
以下是该配置选项的简要解释。
SMTP string
仅用在Windows: SMTP服务器的DNS名字或IP地址。PHP在用mail()函数发送邮件时将用SMTP服务器。
smtp_port int
仅用在Windows:当用mail()函数发送邮件时设置连接到指定SMTP服务器的端口号,默认: 25。仅在PHP 4.3.0后可用。
sendmail_from string
PHP在Windows系统中发送邮件时,将用"From:"邮件地址。
sendmail_path string
在什么地方找到发送邮件程序。通常在: /usr/sbin/sendmail或/usr/lib/中。在这配置选项为了你能正常工作而设置了一个默认值。但是如果它失败,你能在这里设定它。
如果系统不能使用 sendmail, 应该按这个指示设置sendmail 包裹器/ 替换他们提供的邮件系统。 举例来说, Qmail 使用者能设置它到新的路径: /var/qmail/bin/sendmail或/var/qmail/bin/qmail-inject。
qmail-正确地处理邮件而不需要任何的选项。
资源类型
该扩展模块未定义任何资源类型。
预定义常量
该扩展模块未定义任何常量
二、使用方法
  语法:
  bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
  mail()函数可以发送指定的消息(string message)到指定的邮件地址(string to)。多个邮件地址之间要用逗号分割。能用这个函数发送邮件附件和特殊类型。
  在上面的语法中的各个参数代表的意思是:string to——收件人的email地址、string subject——email的主题、string message——email的正文、string additional_headers——加email的附加信息到信件头尾部。
  如果邮件成功的被发送mail()函数将返回TRUE,否则返回FALSE。
注意!
  mail()函数在Windows中的执行方法有很多地方不同于UNIX系统。
  1、它不用局部二进制构成消息体;
  2、类似 From:, Cc:, Bcc:和Date:的headers头元素 ,首先不被MTA解释,但能被PHP解释。 PHP < 4.3仅支持 Cc:且区分大小写, PHP >= 4.3支持所有提及的headers头元素而且不区分大小写。
二.一、例子 1、发送邮件:
<?php
mail("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3");
?>
二.二、如果使用第四个参数,这个参数字串将插入信件头尾部。这是典型的插入用于说明附加信件头信息。多个附加信件头信息之间要用回车\r和换行\n符隔开。
例子 2. 发送附加信件头信息邮件:
<?php
 mail("nobody@example.com", "the subject", $message,"From: webmaster@{$_SERVER[’SERVER_NAME’]}\r\n"
   ."Reply-T webmaster@{$_SERVER[’SERVER_NAME’]}\r\n"."X-Mailer: PHP/" . phpversion());
?>
二.三、如果用additional_parameters参数,当发送邮件时程序用sendmail_path配置设置一个附加参数。例如,当在邮件前用-f选项时这能用来设定寄件人地址信封。当你用这个方法设置寄件人信封时,你也许需要加那个用户到你的WEB服务器You may need to add the user that your web server runs as to your sendmail configuration to prevent a ’X-Warning’ header from being added to the message when you set the envelope sender using this method.
例子 3. 发送附加的信件头信息邮件而且附加一个指令参数。
<?php
 mail("nobody@example.com", "the subject", $message,"From: webmaster@{$_SERVER[’SERVER_NAME’]}",       "-fwebmaster@{$_SERVER[’SERVER_NAME’]}");
?>
  注意:其中的第五个参数附加在PHP 4.0.5版本中。在PHP 4.2.3以后的版本中的安全模式中被禁止,如果用它的话将返回一个警告信息和返回FALSE值。
  你同样能用简单的字符串构造技术建立一个复杂的邮件消息。
例子 4. 发送一个复杂邮件
<?php
/*收件人*/
$to = "Mary <mary@example.com>" . ", " ; //注意逗号
$to .= "Kelly <kelly@example.com>";
/*主题*/
$subject = "Birthday Reminders for August";
/*正文*/
$message = ’
  <html>
  <head>
  <title>Birthday Reminders for August</title>
  </head>
  <body>
    <p>Here are the birthdays upcoming in August!</p>
      <table>
        <tr>
          <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
        </tr>
        <tr>
          <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
        </tr>
        <tr>
          <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
        </tr>
      </table>
  </body>
  </html>’;
/*你能设置头内容:Content-type来发送HTML格式邮件。*/
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
/*附加头消息*/
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";
/*发送它*/
mail($to, $subject, $message, $headers);
?>
注意:
1、不要在收件人地址和主题中有换行符号,否则邮件可能不能被发送出去。
2、收件人地址参数(string to)中不能存在以"Something <someone@example.com>"形式地址,否则当用MTA时mail命令可能不被正确的分析。
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!