加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[PHP] PHPMailer发信失败,用这种方式找原因

发布时间:2021-05-21 06:54:29 所属栏目:大数据 来源: https://www.jb51.cc
导读:当有个功能要发送通知邮件时,大家都会去用PHPMailer来调用第三方的smtp发信,经常遇到莫名其妙的错误,不知道是什么原因 . 今天我也遇到了这种问题,在发信时一直都是false,找了半天 这个类库最终还是拼接的smtp协议,与我们自己手动telnet然后 auth login?,mail

当有个功能要发送通知邮件时,大家都会去用PHPMailer来调用第三方的smtp发信,经常遇到莫名其妙的错误,不知道是什么原因 .

今天我也遇到了这种问题,在发信时一直都是false,找了半天

这个类库最终还是拼接的smtp协议,与我们自己手动telnet然后 auth login?,mail from 等是一样的,但是我们不知道他最终拼成的smtp协议究竟是什么样的,所以不知道原因

?

需要使用strace命令来查看类库究竟发送和接收到了什么 ?

可以这样使用?strace? -e sendto,recvfrom -s 1024000 PHP? testmail.PHP

-e是过滤参数的意思,只打印 sendto和recvfrom的信息,-s是数据的长度,写长一点,得到以下结果

?

sendto(3,"EHLO localhost.localdomainrn",28,MSG_DONTWAIT,NULL,0) = 28
recvfrom(3,"220 smtp-30-235.smtpsmail.email.yf.sinanode.com ESMTPrn",8192,NULL) = 55
sendto(3,"HELO localhost.localdomainrn","250-smtp-30-235.smtpsmail.email.yf.sinanode.comrn250-AUTH LOGIN PLAINrn250-AUTH=LOGIN PLAINrn250-STARTTLSrn250 8BITMIMErn",NULL) = 121
sendto(3,"AUTH LOGINrn",12,0) = 12
recvfrom(3,"250 smtp-30-235.smtpsmail.email.yf.sinanode.comrn",NULL) = 49
sendto(3,"bm90aWNlaQHaNpbmEubmV0rn",22,0) = 22
recvfrom(3,"334 VXNlcm5hbWU6rn",NULL) = 18
sendto(3,"dG9uZ3paoaV8yMDMa5NDRfMQ==rn",26,0) = 26
recvfrom(3,"334 UGFzc3dvcamQ6rn","MAIL FROM:<notice@sina.net>rn",29,0) = 29
recvfrom(3,"235 OK Authenticatedrn",NULL) = 22
The following From address Failed: xxxx@sina.net

看到这么一段信息,里面清楚的标出了sendto发出去的数据 和recvfrom收回来的数据,经过对比class.smtp.PHP 代码?

最终发现是在新浪企邮的smtp返回信息 与其他免费邮箱的smtp信息 多几行,而类库还是按照他自己的逻辑只读取了一行记录,因此很多地方就对不上了,错位了?

把smtp代码里 读取返回数据的地方对应好,他切分前三个数字作为返回码进行判断,有些也判断的不对,多对应一下改一改源码

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读