PHP邮件没有发送,我该如何调试?

mgP*_*ePe 14 php email

我一直在尝试发送电子邮件进行注册,邀请等.

在本地开发中,电子邮件将被发送.但是,一旦在服务器上没有邮件到达.

我安装了postfix.我试图设置一个邮件服务器,但放弃了.所以目前,如果我输入终端

peter# mail example@example.com
Run Code Online (Sandbox Code Playgroud)

电子邮件到了.但是,这不会发送电子邮件:

 $res  = mail('example@example.com', 'subj', 'bodddd');
Run Code Online (Sandbox Code Playgroud)

不仅如此,回声$res也没有给出任何东西.既不是true也不是false.

我该怎么做才能让它发挥作用?

感谢名单

Old*_*ool 18

根据您上面的评论,看起来您的sendmail路径错误或在您的php.ini中注释掉了.它应该是这样的:

sendmail_path = /usr/sbin/sendmail -t -i
Run Code Online (Sandbox Code Playgroud)

如果您不确定sendmail二进制文件所在的位置,可以使用以下命令找到它:

whereis sendmail
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用"which sendmail"而不是whereis,这只会在结果中显示二进制文件. (2认同)
  • 很好,"-t -i"旗帜确实对我有所帮助!:) 他们在做什么? (2认同)
  • @LuisMiguelSerrano from `## man sendmail` "-i 不要从传入消息的行中去除前导点,并且不要将行上的点单独视为传入消息的结尾。如果您是从文件中读取数据。” ............ 和“-t 为收件人读取消息。收件人:、抄送:和密件抄送:将扫描收件人地址。密件抄送:行将在传输前删除。” (2认同)

小智 6

在共享主机上对我有用的解决方案是-fmail函数中使用附加参数。代替 ...

mail($to, $subject, $body, $headers);

我不得不使用...

mail($to, $subject, $body, $headers, " -fvaliduser@validdomain.com");

根据php 手册,附加参数作为附加参数提供给 sendmail。请注意,-f电子邮件和电子邮件之间缺少空格似乎是故意的。

就我而言,在一台特定主机上,我无法访问 postfix/sendmail 日志。原始命令返回 true 并且 cpanel 日志显示它已被接受交付,但收件人从未收到它。