是否可以将sendmail配置为默认使用SMTP身份验证(用于PHP) ?


Is it possible to configure sendmail to use SMTP authentication by default (for use with PHP)?

我正在维护一个旧的PHP应用程序,我想将其配置为使用Mandrill发送电子邮件。当然,Mandrill需要SMTP身份验证。该应用程序直接使用PHP的mail()函数。

是否有任何方法可以配置sendmail(或等效服务)默认使用SMTP身份验证发送(使用Mandrill的凭据),而不必替换整个应用程序中的所有mail()调用?

我在PHP .ini中看到了一些关于SMTP配置的其他答案,但这只适用于Windows,所以我相信我唯一可以改变的PHP设置可能有用的是sendmail_path,默认为sendmail -t -i。我在想也许我可以把它指向一个shell脚本,但我不确定如何去做,或者它是否会工作。

感谢@mti2935的回答,我能够得到这个工作。我在获得sSMTP工作时遇到了麻烦(得到错误"send-mail:无法打开smtp.mandrillapp.com:587",即使没有防火墙阻止它),所以我遵循第二个链接并设置了MSMTP。我不得不将tls_trust_file设置更改为/etc/pki/tls/certs/ca-bundle另外,链接中推荐的sendmail_path PHP设置对我不起作用;我不得不将其更改为"/usr/bin/msmtp -C/etc/msmtp/myconfig -t"(并重新启动Apache,因为我在php.ini中更改了这一点,而不是在。htaccess文件中…请注意,配置文件可以被称为任何你想要的;选择您自己的名字来代替"myconfig")。

另外,在测试时,一定要指定一个"发件人"地址,否则包括Gmail在内的一些目的地可能会拒绝邮件。

有许多轻量级的sendmail替代品,可用于通过远程SMTP中继服务器(如SSMTP、MSMTP和Nullmailer)中继传出消息。通过将/usr/sbin/sendmail替换为其中一个,您可以通过远程SMTP服务器中继从PHP脚本发送的外发邮件,而无需对使用PHP mail()函数的PHP脚本进行任何更改。这些替换只是将消息传递给中继服务器——它们不处理传入的邮件,它们不管理队列,等等。

看:http://itekblog.com/ssmtp-a-gmail-sendmail-relay-replacement-for-linux/http://www.emanueletessore.com/how-to-configure-msmtp-as-a-gmail-relay-on-ubuntu-server/http://untroubled.org/nullmailer/

另一个选项可能是继续使用sendmail,并配置一个智能主机。见https://serverfault.com/questions/41448/fastest-way-to-allow-sendmail-relay-through-smarthost

Swiftmailer是一个不错的选择。您还应该看一下Zend2 Mail。我在一个小项目中使用了它,它很好地满足了要求。

PHP Storm有一个很酷的搜索和替换功能。如果你只是搜索"mail("(不带引号)),你可以手动浏览结果并在替换它们之前进行确认。或者你可以做一个替换,但是在它替换每一个出现之前,你可以确认它