梨/NETE-SMTP

SMTP协议的一种实现

安装317×440

家属十一

暗示者

明星十八

观察者

餐具三十

公开问题

1.1.1 2018-09-2500

自述文件

用户文档

作者 乔恩帕里斯
联系 JON-PHP.NET

目录

1依赖

1.1珠光误差

NETYSMTP包使用珠光误差类的所有错误处理.

1.2内网插座旅行包

这个内网插座包被用作所有网络通信的基础。

$SOCKOYOPTIONS =数组(‘SSL’=>数组(‘VeFiyyPeer-SynNeX’=> false));$$SMTP=新的NETIsSMTP($HOST,NULL,NULL,NULL,FALSE,0,$SOCKETYORY选项);

笔记PHP 5.6介绍OpenSSL更改. 默认情况下,启用对等证书验证。虽然不推荐使用$SOCKETYORE选项来禁用对等验证(如上文所示)。

1.3奥斯塔斯尔旅行包

这个奥斯塔斯尔包是可选的依赖项。如果它是可用的,则.NETELSMTP包将能够支持Digest-Md5CRAM-MD5SMTP认证方法。否则,只有登录平原方法将是可用的。

2错误处理

所有NETSMTP类的公共方法都返回一个珠光误差对象是否发生错误。检查PyrError对象的标准方法是使用梨::IsRelor()

(Paul::ISOrror($Reals= $SMTP>连接())){模具($Realth-> GETMaseAGE());

3 SMTP认证

NETYSMTP包支持SMTP认证标准(如定义的RCF-2554NETYSMTP包支持以下身份验证方法,按优先顺序排列:

3.1 GSSAPI

GSSAPI认证方法使用Kerberos 5协议(RFC-4120)不使用用户/密码。格萨皮亚尔校长参数和有一个可选的凭据缓存格萨皮亚姓参数。需要DNS和密钥分发中心(KDC)设置。它被认为是SMTP认证最安全的方法。

笔记仅支持GSSAPI身份验证方法,如果KRB5PHP扩展是可用的。

3.2食谱-Md5

Digest-M5认证方法使用数据安全公司MD5的消息摘要算法。它被认为是一种比普通或登录更安全的SMTP认证方法,但仍然容易受到没有TLS/SSL的MITM攻击。

笔记仅支持Digest-Md5身份验证方法。奥斯塔斯尔包装是可用的。

3.3 CRAM-MD5

CRAM-MD5认证方法已经被Digest-Md5方法在安全性方面。这里提供了与可能不支持较新的Digest-D5算法的旧SMTP服务器的兼容性。

笔记只支持CRAM-MD5身份验证方法奥斯塔斯尔包装是可用的。

3.4登录

登录身份验证方法使用Base64编码方案。因为解密Base64编码的字符串是微不足道的,所以登录不被认为是一种安全的认证方法,应该避免。

3.5平原

普通认证方法以明文形式发送用户口令。该认证方法不安全,应避免。

4个安全连接

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

$SMTP=新的NETYSMTP(“SSL://mail .Fask.com”,465);

此示例连接到May.Excel在端口465(一个常见的SMTPS端口)上使用SSL:/ /运输

5发送数据

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

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

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

头数据可以通过将消息传递为可选的第二个参数来与消息体数据分开指定。数据(). 当打开文件资源用于提供消息数据时,这是特别有用的,因为它允许头字段(如主题要在运行时动态构建。

$SMTP- >数据($FP,“主题:我的主题”);

6数据引用

默认情况下,所有输出字符串数据都是按照SMTP标准引用的。这意味着所有本地UNIX(\n和Mac(R)将线路末端转换为因特网标准CRLF(\rn还因为SMTP协议使用单个引导周期。.为了通知消息数据的结束,原始数据串中的单个引导周期被“加倍”(例如)。“”。

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

因此,可以扩展NETYSMTP类,以便实现您自己的自定义引用例程。只要创建一个新的类,基于NETYSMTP类并重新实现QuoTEDATA()方法

需要“NETE.SMTP.php”;“类NET.SMTPpUnvice”扩展NETIOSMTP{{函数QuoTeData($data){{/*,执行自定义数据引用*/}}}

请注意$数据参数将传递给QuoTEDATA()功能参照. 这意味着你可以直接操作。$数据. 它也是复制大量的开销。$数据从字符串到QuoTEDATA()方法

7服务器响应

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

在成功连接时,服务器的问候字符串可以通过GETRealTeg()方法

8调试

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

$SMTP> > StEdbug(TRUE);

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

函数Debug处理程序($SMTP,$消息){{ ECHORE〉[$SMTP->主机] $消息\n“;{} $sMTP> > SEDUPDATG(TRUE,“Debug处理程序”);

9例

9.1基本用途

下面的脚本演示了如何使用NETYSMTP包发送简单电子邮件消息:

需要“NET/SMTP.php”;“$Guest=“Mail .Simult.com”;$$=‘用户@示例.COM’;$$ RCPT=数组(‘RealthTun1@示例.com’,‘RelePix2@示例.com’);$ $Suj=“主题:测试消息\n”;$$体=“体线1 \nBrand线2”;* /*创建一个新的NETSySMTP对象。*/如果!($SMTP=新的NETIsSMTP($HOST)){死()无法实例化NETIOSMTP对象\n);{}/*连接到SMTP服务器。*/IIF(Paul::ISOrror($e= $sMTP>连接())){模具($e->GETMaseAGE())。\n);{} /*发送“邮件从:”SMTP命令。*/IIF(Paul::ISOrror($SMTP->Mayfrom($from))){死(“不能将发件人设置为< $>从> n”);{}/*将消息发送给每个收件人。*/yOrFACH($RCPT为$to){if(Paul::ISOrror($RES= $SMTP->RCPTTO($to))){死(“不能添加收件人< $> >”。$RES> GETMISAGE()。\n);{}{}/*设置消息的正文。*/IF(PEA::ISORATION($SMTP>数据)($SUJ)。\r\n。{主体)){死亡(无法发送数据\n);}}/*从SMTP服务器断开连接。*/s$sMTP>