【发布时间】:2010-03-25 20:43:36
【问题描述】:
我正在使用 PHP mail() 函数从联系表单发送电子邮件。该函数返回true,所以应该没问题。但我没有收到电子邮件。
我看到一些帖子说您应该始终在 PHP 邮件中使用 From 和 Reply-To 标头来确保它已送达。我已经尝试了各种配置,但还没有任何效果。
还有其他方法可以调试mail()函数吗?
【问题讨论】:
-
一些代码怎么样,我们可以看到你在做什么?
我正在使用 PHP mail() 函数从联系表单发送电子邮件。该函数返回true,所以应该没问题。但我没有收到电子邮件。
我看到一些帖子说您应该始终在 PHP 邮件中使用 From 和 Reply-To 标头来确保它已送达。我已经尝试了各种配置,但还没有任何效果。
还有其他方法可以调试mail()函数吗?
【问题讨论】:
大多数情况下,此问题是由标头引起的,邮件可能会被发送,但由于标头错误,SMTP 服务器可能永远不会发送它
我建议您使用 PHP 的邮件类,例如 phpMailer,它可以处理您的所有标题问题,并且有一个非常好的使用界面
干杯
【讨论】:
如果您使用的是 Windows,则需要安装 SMTP 服务器。
如果您使用的是 linux,则需要启用 sendmail 并确保安装 PHP 的用户帐户可以访问 sendmail 二进制文件。
询问您的主机您的帐户是否有足够的权限来访问二进制文件。
在此处发布您的代码也可能会有所帮助,以防您忽略了其中的错误。
【讨论】:
您是从自己的计算机发送邮件吗?您可能没有设置可以访问本地域以外的 SMTP 服务器。您也可能被垃圾邮件过滤器阻止,具体取决于您的邮件服务。
如果您是在自己的计算机上执行此操作,请通过向您的一个本地邮件帐户发送本地消息来测试它(如果您使用的是 Linux)。如果您认为这是问题所在,请安装 postfix。
如果您是通过托管服务进行的,请检查您的垃圾邮件文件夹。
【讨论】:
我知道它并没有专门回答您的问题,但我的建议是使用 swiftmailer 之类的东西而不是 mail()。它更加可靠,无论是在上班还是通过邮件方面。
【讨论】:
在某些服务器上,您需要明确设置 FROM 标头,否则将不会发送。
【讨论】:
Goat,如果您尝试使用该功能的服务器位于动态外部 IP 上,那么您就是 SOL。大多数邮件服务器现在阻止来自动态 IP 范围的端口 25 上的传入连接。 :(
【讨论】:
它是共享主机吗?我知道有些公司会覆盖邮件功能以避免垃圾邮件,并需要额外的参数或一些预定义的值(例如 from 字段必须是您域名中的有效地址)。您可能需要咨询您的网络托管公司。您是否有可以尝试相同代码的私人设置?
【讨论】:
您的提供商的邮件服务器可能被禁止。检查 dns 黑名单或联系您的托管服务提供商。
【讨论】: