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

Mic*_*l B 21 email php sendmail

背景:如果您为开发目的设置了本地 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('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');

我对我的服务器故障者的问题是:

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

cor*_*ump 6

好吧,我知道这不是您要问的,但是您为什么不尝试 Postfix 或 Exim?它们都可用于 ubuntu(Postfix 甚至是 Ubuntu 系统上的默认 mta),并且它们都提供了一个兼容的“sendmail”命令,效果很好。恕我直言,sendmail 有点过时了,您将获得更现代的 MTA 更好的支持机会。


Mic*_*l B 2

这对我有用:

  • 安装后缀

请参阅此处有关如何执行此操作的说明: 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
Run Code Online (Sandbox Code Playgroud)

查找sendmail进程

ps aux | grep mail
Run Code Online (Sandbox Code Playgroud)

杀了它

kill <thepid>
Run Code Online (Sandbox Code Playgroud)

重新开始postfix

/etc/init.d/postfix restart
Run Code Online (Sandbox Code Playgroud)

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