从PHP发送电子邮件

从PHP发送电子邮件

本教程将介绍如何轻松地从启用PHP的Web服务器发送电子邮件。 它可以用于处理表单数据,发送警报等。它还解释了有关电子邮件头格式化的一点。

系统配置

显然你需要一个web服务器与PHP一起安装。 您还需要确保您的操作系统安装了一些电子邮件代理(例如,在Linux上的Sendmail或IIS下的SMTP服务)。 并确保端口25没有被阻塞。 即使您通过第二台服务器中继邮件,也是必需的。

默认情况下,PHP已启用邮件功能。 但是,您可以在[邮件功能]部分(行#约700)中的'php.ini'文件中指定其他选项。

句法

以下是mail()命令的完整语法:

bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );

前3个参数不需要任何解释:收件人电子邮件地址,消息的主题,消息的内容。 $ additional_headers参数包括稍后将列出的电子邮件标题。 $ additional_parameters用于传递特定于用于发送电子邮件的程序(例如sendmail)的选项,很少使用。 您需要检查sendmail的手册页以获取选项列表。

绝对最小值要求您指定以下内容:

mail ( $email_address_to , $subject, $message_contents );

但是,由于合规性原因,建议定义附加标头。 电子邮件消息必须与RFC#822兼容。

下面的示例显示了可以使用的一些电子邮件标题:

  • 来自:发件人的电子邮件地址。
  • 回复:应答发送到的电子邮件地址。
  • 返回路径:这是用于在不传递消息的情况下,必须返回。
  • 主题:电子邮件主题。
  • CC:碳复写。 所有其他收件人将看到的更多收件人的逗号分隔列表。
  • BCC:盲碳复制。 更多收件人的逗号分隔列表,不会被任何其他收件人看到。
  • Content-type:定义消息的MIME类型。
  • X-Mailer:指定用于发送消息的电子邮件客户端。

要记住的重要事情是,头名称区分大小写,并且每个标题必须以返回换行符结尾。

每条消息都通过最少2个电子邮件服务器(发件人和收件人)路由。 然而,路由中可能会有更多的电子邮件服务器,例如中继服务器,反垃圾邮件服务器等。每个服务器都将自己的邮件头添加到邮件中。 您还必须记住,根据设置,您的Web服务器可能会交换一些标题字段,例如Return-Path 。 请注意,此字段不会影响回复地址。

这是一个简单的例子,它将发送一封电子邮件:

<?php
$email_address_to = "recipient@demo.com";
$subject = "Test email subject";
$message_contents = "Hi! This is the content of the test message.";
$header = "From: sender@demo.com\r\n";
$header .= "Reply-To: sender@demo.com\r\n";
$header .= "Return-Path: sender@demo.com\r\n";
mail($email_address_to,$subject,$message_contents,$header);
?>

完整例子

此示例显示更多有组织的结构,具有更多选项和更多标题:

<?php
// --- CONFIG PARAMETERS --- //
//
   $email_recipient = "recipient@demo.com";
   $email_sender = "Sender Name
  
   ";
   $email_return_to = "sender@demo.com";
   $email_content_type = "text/html; charset=us-ascii";
   $email_client = "PHP/" . phpversion();
//
// ------------------------- //

// --- DEFINE HEADERS --- //
//
   $email_header = "From: " . $email_sender . "\r\n";
   $email_header .= "Reply-To: " . $email_return_to . "\r\n";
   $email_header .= "Return-Path: " . $email_return_to . "\r\n";
   $email_header .= "Content-type: " . $email_content_type . "\r\n";
   $email_header .= "X-Mailer: " . $email_client . "\r\n";
//
// ---------------------- //

// --- SUBJECT AND CONTENTS --- //
//
   $email_subject = "Test email subject";
   $email_contents = "<html>";
   $email_contents .= "<h2>Test Email</h2>";
   $email_contents .= "<br><b>Sender: " . $email_sender;
   $email_contents .= "<br><b>Recipient: " . $email_recipient;
   $email_contents .= "</html>";
//
// ---------------------------- //

$email_result = mail($email_recipient, $email_subject, $email_contents, $email_header);
if ($email_result) echo "Email has been sent!";
else echo "Email has failed!";
?>

  
  • 注意: Mail()的Windows实现在许多方面与Unix实现不同。 首先,它不使用本地二进制文件来编写消息,而只能在直接套接字上操作,这意味着需要在网络套接字(可以在本地主机或远程机器上)监听MTA。 第二,自定义头像,如From :, Cc :, Bcc:和Date:首先不被MTA解释,但是由PHP解析。 因此,to参数不应该是“Something <someone@example.com>”的形式的地址。 与MTA通话时,邮件命令可能无法正确解析。
  • 注意:值得一提的是,mail()函数不适合循环中较大量的电子邮件。 此功能打开和关闭每个电子邮件的SMTP套接字,这不是很有效率。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏