通过远程 smtp 服务器进行 PHP 邮件中继

通过远程 smtp 服务器进行 PHP 邮件中继

可能重复:
如何使用远程 SMTP 配置 php.ini?

我们有一个在 Linux 上运行的 php 应用程序,用于向用户发送电子邮件。目前,它的设置(如 php.ini)配置为通过本地 sendmail 服务器发送,但我们的组织为该域配备了单独的邮件服务器。我想通过该远程 smtp 服务器发送 php 应用程序电子邮件,以便这些电子邮件可以具有正确的 SPF 记录并通过 DKIM 签名。

但是我在 php.ini 中看不到这样的选项来指定将电子邮件转发到的远程主机地址,它仅适用于 Windows。

我看到了一些建议的帖子phpMailer,但我找不到如何配置它,以便我们所有的 php 应用程序都可以通过我们的远程 SMTP 发送。

答案1

我会安装空邮件程序并将其配置为将电子邮件转发到您的中继服务器。您使用的 Linux 发行版很可能有 nullmailer 包,因此 sendmail 二进制文件(与命令行兼容)安装在正确的位置。

如果您不想安装 nullmailer,也可以使用 sendmail。如果您愿意,我会更新答案。

更新:

如果您想在 sendmail 下执行此操作,您有多种选择:

(1)在 sendmail.mc 中将 SMART_HOST 定义为您的邮件中继服务器:

define(SMART_HOST, `smtp:[relay.server]')dnl

(2)您可以使用功能(nullclient)

(3)修改规则集 0 以执行此操作。在 sendmail.mc 中添加以下几行:

LOCAL_RULE_0
R$* < @ $* . > $*       $#esmtp $@ [relay.server] $: $1 < @ $2 . > $3

请勿复制粘贴上面的代码片段,因为左侧与右侧是用制表符而不是空格分隔的。

编辑完 sendmail.mc 后,您需要编译 sendmail.cf 并重新启动 sendmail。在 Debian 中,通过运行 完成此操作sendmailconfig。在 CentOS 中,通过运行,/etc/mail/make然后执行完成此操作service sendmail restart

答案2

请先搜索,这个问题之前有人问过(例如如何使用远程 SMTP 配置 php.ini?)。

PHPmail()函数始终使用 sendmail(在 Linux/Unix 上)。无法通过 php.ini 更改这一点。剩下另外两种方法:

  • 对于单个应用程序,您可以将对该mail()函数的所有调用替换为对备用库(例如 PHPMailer)的调用。
  • 作为一个更通用的解决方案,您可以配置本地 sendmail(或任何提供该sendmail命令的程序)来执行正确的事情,即将域的邮件服务器设置为智能主机。

相关内容