【问题标题】:mail() php return true but mail not receivedmail() php 返回 true 但未收到邮件
【发布时间】:2014-08-18 13:10:10
【问题描述】:

尝试从我的 ubuntu 14.04 localhost 发送电子邮件。 我正在使用 php 的 mail()。它返回 true,但我没有收到任何电子邮件。 尝试了不同的提供商(gmail、雅虎)。 但每次我在 mail.log 中收到此消息时:

Aug 18 15:05:10 salvatore-vaio sm-mta[5378]: s7ID59ib005376: to=<dibenedettosa@yahoo.it>, ctladdr=<www-data@salvatore-vaio.huawei.com> (33/33), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=121979, relay=mx-eu.mail.am0.yahoodns.net. [188.125.69.79], dsn=4.0.0, stat=Deferred: Connection refused by mx-eu.mail.am0.yahoodns.net.

我试过了:

telnet mx-eu.mail.am0.yahoodns.net 465

但我收到以下消息:

telnet:无法连接到远程主机:网络不可达

也试过了:

ping -c 3  mx-eu.mail.am0.yahoodns.net

得到了这个:

--- mx-eu.mail.am0.yahoodns.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 168.969/445.192/995.807/389.344 ms

还有我的 php.ini:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.mail.yahoo.com      
; http://php.net/smtp-port
smtp_port = 465
auth_username = myid
auth_password = mypass

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = dibenedettosa@yahoo.it

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "/usr/sbin/sendmail -t -i"

找不到任何解决方案...

【问题讨论】:

  • 你用什么做邮件服务器?
  • 考虑使用 PHPMailer 之类的库,如果您想通过 smtp 服务器发送邮件,可以使用来自 gmail 的库
  • 依靠mail() 的返回true:如果邮件被SMTP 服务器接受以进行传递,PHP 的mail() 函数将返回True。 True 暗示邮件包含有效的电子邮件地址或邮件实际已送达。

标签: php email


【解决方案1】:

您不得使用 yahoo 邮件服务器来转发您的电子邮件。您需要进行身份验证才能使用它。这可以通过配置文件使用mail(),但使用PHPMailerSwiftMail 更容易。

您的邮件传输代理:salvatore-vaio (sm-mta)

不允许使用mx-eu.mail.am0.yahoodns.net

这是为了防止垃圾邮件。

对于发送邮件地址www-data@salvatore-vaio.huawei.com

nsaboard:~# host salvatore-vaio.huawei.com
Host salvatore-vaio.huawei.com not found: 3(NXDOMAIN)

您需要设置MX DNS 记录和不同的技术来提高声誉。 (如 SPF 和 DKIM。)。

如果您直接使用 yahoo,请将您的 sendmail_from 设置为 yahoo 地址。

消息延迟可能由多种原因引起。

【讨论】:

  • 我正在尝试使用 PHPMailer,但我收到 Mailer Error: SMTP connect() failed。我正在使用此处发布的示例:github.com/PHPMailer/PHPMailer
  • @SalvatoreDibenedetto 你能发布配置吗
【解决方案2】:

您的问题可能是您需要在 smtp 上表明自己的身份。

检查 php.ini 中的 smtp 服务器。将 smtp 更改为您可以实际使用的。

【讨论】:

  • 这是我的 php.ini:[mail function] 中的内容;仅适用于 Win32。 ; php.net/smtp SMTP = smtp.mail.yahoo.com ; php.net/smtp-port smtp_port = 465 auth_username = myid auth_password = mypass ;仅适用于 Win32。 ; php.net/sendmail-from ;sendmail_from = dibenedettosa@yahoo.it ;仅适用于 Unix。您也可以提供参数(默认值:“sendmail -t -i”)。 ; php.net/sendmail-pathsendmail_path = "/usr/sbin/sendmail -t -i"
【解决方案3】:

我终于修好了。 正如@DanFromGermany 推荐的那样,我从here 下载了PHPMailer,并使用了该页面中发布的示例。

我还不得不面对关于 gmail 的“两步验证”的第二个问题。 这需要为允许登录的应用程序生成一个特定的密码。 查找here google 文档

之后就成功了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2016-01-16
    • 2014-07-14
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多