php mail() 函数在本地开发机器上非常慢

php mail() 函数在本地开发机器上非常慢

背景:如果您已为开发目的设置了本地 Apache 服务器,则可能会遇到 sendmail 需要很长时间(至少一分钟)才能发送电子邮件的问题。如果您尝试调试已生成的电子邮件的问题,这会非常令人沮丧。

互联网上有几个论坛帖子讨论了这个问题。但是,没有一个帖子能详细地描述如何解决我有限的知识。以下是对我有用的步骤:

1)使用以下命令找到您的主机名(以防您忘记了):

:~$ cat /hosts/hostname

myhostname

2)编辑文件/etc/hosts并确保第一行如下:

127.0.0.1 localhost.localdomain localhost myhostname

3)编辑 sendmail 配置文件(/etc/mail/sendmail.cf在 Ubuntu 中)并取消注释该行#O HostsFile=/etc/hosts

4) 重启电脑。现在电脑启动速度应该快多了,mail() 函数应该几乎立即返回。但是,除非您按照步骤 5 操作,否则电子邮件实际上不会发送。

5) 每次使用邮件功能时,必须使用 sendmail '-f' 选项。例如:

mail('[email protected]', 'the subject', 'the message', null, '[email protected]');

我对其他 serverfaulters 的问题是:

可以进行哪些进一步的更改以便我不必使用 sendmail -f 选项?虽然添加 -f 选项并不难,但是当您的 CMS(例如 Drupal)在发送邮件时不使用 -f 选项时,就会出现问题。您需要破解核心模块来添加此选项。

答案1

好吧,我知道这不是你要问的,但是你为什么不试试 Postfix 或 Exim?它们都适用于 ubuntu(Postfix 甚至是 Ubuntu 系统上的默认 mta),并且它们都提供了兼容的“sendmail”命令,效果非常好。在我看来,sendmail 有点过时了,使用更现代的 MTA 更有可能获得支持。

答案2

这对我有用:

  • 安装 postfix

请参阅此处有关如何执行此操作的说明: https://help.ubuntu.com/community/Postfix (它可能已经安装,并且“sendmail”二进制文件实际上可能是 postfix 的别名)

  • 请按照此处的说明进行操作:

http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/

mkfifo /var/spool/postfix/public/pickup

查找sendmail进程

ps aux | grep mail

杀了它

kill <thepid>

重新开始postfix

/etc/init.d/postfix restart

我认为您可以将“myorigin”参数设置为任何活动域名,例如您拥有的域名。

答案3

这可能是也可能不是您的解决方案:添加到您的mail.force_extra_parameters = "[email protected]"php.ini文件。它使 PHP 自动追加[电子邮件保护]作为 PHP 的 mail() 函数的第五个参数。

这是一个硬编码值,仅适用于 php.ini,因此它不太灵活,但也许在您的开发案例中适合您?

答案4

我从未遇到过在 PHP 中使用 mail() 时出现的问题,而该问题不是由 MTA 问题引起的。

在您的 php.ini 文件中,它将显示发送电子邮件时运行的命令(默认:“sendmail -t -i”)。尝试使用此命令从命令行发送电子邮件 - 我敢打赌它很慢。

通常要检查的是机器上的 DNS 服务器是否配置正确(并且能解析 MTA 中配置的所有地址),以及如果配置了智能中继,那么名称是否可以解析为系统可以连接的地址。

相关内容