跳到内容

梨/网_SMTP

存储库文件导航

Net_SMTP包

用户文档

作者: 乔恩·帕里斯 阿明·格雷夫
联系人: jon@php.net schengawegga@gmail.com

目录

依赖关系

这个PEAR_错误等级

Net_SMTP包使用PEAR_错误为其所有类错误处理.

这个网络插座包裹

这个网络插座包被用作所有网络通信的基础。连接选项可以通过$socket_options($socket_选项)施工参数:

$socket_options=数组('sl'=>数组('verify_peer_name'=>false));$smtp=新的Net_smtp($host、null、null,false、0、$socket_options);

注:引入PHP 5.6OpenSSL更改。对等证书验证现在默认启用。虽然不建议,$socket_options($socket_选项)可以用于禁用对等验证(如上所示)。

这个授权_SASL包裹

这个授权_SASL包是可选的依赖项。如果可用,Net_SMTP包将能够支持DIGEST-MD5型,CRAM-MD5型SHA刮擦SMTP身份验证方法。否则,只有登录平原方法将可用。

错误处理

所有Net_SMTP类的公共方法都返回一个PEAR_错误对象。检查PEAR_Error对象的标准方法是使用珍珠::isError():

if(PEAR::isError($error=$smtp->connect())){die($error->getMessage());}

SMTP身份验证

Net_SMTP包支持SMTP身份验证标准(由RFC-2554号文件). Net_SMTP软件包支持以下身份验证方法,按优先顺序排列:

CRAM-MD5(已弃用)--------

已弃用这种身份验证方法不再安全,应该避免使用。

CRAM-MD5身份验证方法已被DIGEST-MD5型方法的安全性。这里提供它是为了与可能不支持较新DIGEST-MD5算法的旧SMTP服务器兼容。

注:仅当授权_ ASL包可用。

摘要-MD5(已弃用)----------

已弃用这种身份验证方法不再安全,应该避免使用。

DIGEST-MD5身份验证方法使用RSA数据安全公司。的MD5消息摘要算法。它被认为是一种比PLAIN或LOGIN更安全的SMTP身份验证方法,但在没有TLS/SSL的情况下仍然容易受到MitM攻击。

注:只有当授权_ ASL包可用。

GSSAPI公司

GSSAPI身份验证方法使用Kerberos 5协议(RFC-4120号文件). 不使用用户/密码。需要服务主体gssapi_主要参数并具有可选凭据缓存gssapi_名称参数。需要DNS和密钥分发中心(KDC)设置。它被认为是最安全的SMTP身份验证方法。

注:仅当克朗5php扩展可用。

登录(已弃用)-----

已弃用这种身份验证方法不再安全,应该避免使用。

LOGIN身份验证方法使用基准64编码方案。因为解密以Base64编码的字符串很简单。

平原

此身份验证方法不再安全,只能在本地或通过TLS加密连接使用。

PLAIN身份验证方法以明文形式发送用户的密码。

紧急停堆

在密码学中,Salted Challenge Response Authentication Mechanism(SCRAM)是一系列现代的基于密码的质询-响应身份验证机制,为服务器提供身份验证。

可用的机构有SCRAM-SHA-1、SCRAM-SSA-224、SCRAM-SHA-256、SCRAS-SHA-384和SCRAM-沙-512。

注:仅当授权_ ASL包可用。

XOAUTH2公司

XOAUTH2身份验证方法根据Gmail的SASL XOAUTH2文档.

安全连接

如果安全套接字传输已在PHP中启用,则可以建立到远程SMTP服务器的安全连接:

$smtp=新的Net_smtp('ssl://mail.example.com', 465);

此示例连接到邮箱.example.com使用ssl://运输。

默认情况下,为经过身份验证的连接启用TLS/SSL(通过auth()方法的$tls(美元)参数),但STARTTLS公司_也可以使用starttls()方法。

发送数据

消息数据使用数据()方法。数据可以作为单个字符串或打开的文件资源提供。

如果提供了字符串,它将通过数据引用系统并作为单个块发送到套接字连接。这些操作都是基于内存的,因此发送大消息可能会导致内存使用率高。

如果提供了打开的文件资源数据()方法将逐行从文件中读取消息数据。每个块都将被引用并单独发送到套接字连接,从而减少了此数据发送操作的总体内存开销。

通过将标题数据作为可选的第二个参数传递给数据()。当使用打开的文件资源提供消息数据时,这尤其有用,因为它允许头字段(例如主题:)在运行时动态构建。

$smtp->data($fp,“主题:我的主题”);

数据引用

默认情况下,根据SMTP标准引用所有出站字符串数据。这意味着所有本机Unix(\n个)和Mac(\第页)行尾转换为Internet标准CRLF(\\r\n)行尾。此外,因为SMTP协议使用单个前导句点(.)为了表示消息数据的结束,原始数据字符串中的单个前导句点将“加倍”(例如“..").

当涉及大数据块时,这些字符串转换可能代价高昂。例如,Net_SMTP包不知道MIME部分(它只是将MIME消息视为一个大字符串),因此在搜索可能需要引用的字符时无法跳过非文本附件。

因此,可以扩展Net_SMTP类以实现您自己的自定义引用例程。只需基于Net_SMTP类创建一个新类并重新实现引用的数据()方法:

需要“Net_SMTP.php”;类Net_SMTP_custom扩展Net_SMTP{函数quotedata($data){/*执行自定义数据引用*/}}

请注意$数据参数将传递给引用的数据()功能通过引用。这意味着您可以直接操作$数据。这也是复制大型$数据字符串往返于引用数据()方法。

服务器响应

Net_SMTP包保留服务器的最后一个响应,以供进一步检查。这个获取响应()方法返回一个2元组(两元素数组),其中包含作为整数的服务器响应代码和作为字符串的响应参数。

成功连接后,服务器的问候语字符串可通过获取问候语()方法。

调试

Net_SMTP包包含内置调试输出例程(默认情况下禁用)。调试输出必须通过setDebug()方法:

$smtp->setDebug(true);

默认情况下,调试消息将发送到标准输出流。如果需要对输出进行更多控制,可以选择安装自己的调试处理程序。

函数debugHandler($smtp,$message){echo“[$smtp->host]$message\n”;}$smtp->setDebug(true,“debugHandler”);

示例

基本用途

以下脚本演示了如何使用Net_SMTP包发送简单的电子邮件:

需要“Net/SMTP.php”;$host='mail.example.com';$from='user@example.com';$rcpt=数组('收件人1@example.com', '收件人2@example.com');$subj=“主题:测试消息\n”;$body=“正文行1\n正文行2”;/*创建新的Net_SMTP对象*/if(!($smtp=新Net_smtp($host)){die(“无法实例化Net_SMTP对象”);}/*连接到SMTP服务器*/if(PEAR::isError($e=$smtp->connect())){die($e->getMessage()。“\n”);}/*发送“MAIL FROM:”SMTP命令*/if(PEAR::isError($smtp->mailFrom($from)){die(“无法将发送器设置为<$from>\n”);}/*将邮件发送给每个收件人*/foreach($rcpt作为$to){if(PEAR::isError($res=$smtp->rcptTo($to)){die(“无法将收件人<$添加到>:”.$res->getMessage()。“\n”);}}/*设置消息正文*/if(PEAR::isError($smtp->data($sub.“\r\n”.$body)){die(“无法发送数据”);}/*断开与SMTP服务器的连接*/$smtp->disconnect();