文章教程

22.1mail()函数和SMTP简介

9/17/2020 9:31:19 PM 人评论 次浏览

22.1 mail()函数和SMTP简介

本节先向读者介绍mail()函数的用法,然后介绍SMTP(Simple Message Transfer Protocol,简单邮件传输协议)。这是PHP实现邮件发送的关键函数,尤其注意其在php.ini中的配置。

22.1.1 mail()函数配置与语法

使用mail()函数发送邮件,首先需要在php.ini文件中做一些配置,其配置选项如表22-1所示。

表22-1 邮件函数mail()配置选项

mail函数的语法如下。


bool mail(string $to,string $subject,string $message [,string $additional_headers,  string $additional_parameters]])

其中,参数$to表示收件人的地址或地址列表;参数$subject表示所发邮件主题;参数$message表示所要发送的消息,即邮件正文,行之间必须以一个LF(\n)分隔,通常每行不能超过70个字符。对于两个可选参数,由于实际应用中用到的情况比较少,这里不再赘述。

在php.ini中配置表22-1中所述选项之后,对于Windows用户来说还需要在系统中安装SMTP服务器,才可以使用函数mail()发送邮件。

22.1.2 SMTP与指令

SMTP可以实现客户端向服务器发送邮件的功能。SMTP分为命令头和信息体两部分。命令头主要完成客户端与服务器的连接、验证等,整个过程由多条命令组成。每条命令发到服务器后,由服务器给出响应信息,一般为3位数字的响应码和响应文本。不同的服务器返回的响应码是遵守协议的,但是响应正文则不必。每条命令及响应的最后都有一个回车符,这样使用fputs()和fgets()就可以进行命令与响应的处理。SMTP的命令及响应信息都是单行的。信息体则是邮件的正文部分,最后的结束行应以单独的句点“.”作为结束行。

客户端常用的SMTP指令如下所述。

·HELO hostname:表示通信开始。

·MAIL FROM:告诉服务器发信人的地址。

·RCPT TO:告诉服务器收信人的地址。

·DATA:所发送电子邮件本身,且最后要以只含有“.”的特殊行结束。

·RESET:表示取消刚才的指令,重新开始。

·VRFY:校验账号是否存在。

·QUIT:退出连接,通信结束。

如下所述是服务器端SMTP主要的响应消息。

·220:表示服务就绪,在socket连接成功时,即返回此信息。

·221:表示正在处理。

·250:表示请求邮件动作正确,即完成HELO、MAIL FROM、RCPT TO和QUIT指令执行成功后返回此信息。

·354:表示开始电子邮件数据的输入,应以句点“.”结束。

·500:表示语法错误,命令不能识别。

·550:表示命令不能执行,邮箱无效。

·552:表示由于磁盘空间不足,中断处理。

教程类别