在 Linux 上使用带有 SMTP 服务器的默认 PHP 邮件功能

Posted

技术标签:

【中文标题】在 Linux 上使用带有 SMTP 服务器的默认 PHP 邮件功能【英文标题】:Use default PHP mail function with SMTP server on Linux 【发布时间】:2012-08-10 04:32:57 【问题描述】:

我正在开发一个 php/c# 项目,该项目是一个带有 Web 界面的电子邮件服务器,用于管理电子邮件服务器应用程序。

该程序应该可以在 windows 和 linux 上运行,但我主要是在 windows 上进行开发。

我没有在 Linux 中进行测试,但发现了一个可怕的问题。

根据我在 Windows PHP 上搜索的内容,您可以选择要使用的 SMTP 服务器,但在 Linux 上您似乎没有此选项,因此当 PHP 发送电子邮件时,它会完全绕过我的程序。

有没有办法让 PHP 使用您选择的 SMTP 服务器,我知道您可以使用 PEAR 覆盖 SMTP 设置,但我希望标准的 PHP 邮件功能可以正常工作,以便 PHPBB 论坛等其他软件可以发送通过我的 SMTP 服务器而不是默认的 php 邮件发送电子邮件。

这是可能的还是我使用梨的唯一选择?

【问题讨论】:

配置 sendmail 以使用您的 smtp? Like @Maerlyn 写道: 为什么不直接配置 sendmail 使用 smtp?谁在乎它是写下来的 php.ini 还是 sendmail 配置?您的应用程序仍在使用mail() 从我用谷歌搜索的内容来看,您不能在 Windows 上的 linux 的 ini 文件中使用外部 smtp 服务器。反正我什么都找不到 @Boardy:在存在的 Linux 软件上,sendmail 二进制文件负责处理。 Sendmail 也可以将其推送到 smtp 服务器,就像 PHP 直接在 windows 上一样。 【参考方案1】:

您的标准 php 邮件功能只会发送到 php.ini 中定义为 sendmail _path 的任何内容

这通常是sendmail -t -i

您需要配置 sendmail 以使用 smtp。

FWIW,大多数从 PHP 应用程序发送大量邮件的开发人员都讨厌 mail(),而是使用提供更好的可配置性/可靠性的许多邮件库(或服务)之一。

例如,您可以将 mail 函数通过管道传输到您自己的 PHP 脚本,并在该脚本中使用您想要的任何库来发送邮件(从而保留跨应用程序使用 mail() 函数)。

【讨论】:

【参考方案2】:

不可能让mail() 函数在非 Windows 系统上使用 SMTP 服务器。

请参阅有关 php.ini 设置 smtp 的文档。

phpmailer 已成为广泛使用的用于发送电子邮件的 PHP 库。它支持各种选项,包括 SMTP 和各种身份验证类型以及 SSL/TLS。如果您需要使用 SMTP 发送消息,我建议您使用它(或类似的东西另见Zend_Mail)。

因此您将无法使用邮件功能,但您唯一的选择不是 Pear。

【讨论】:

您误读了文档。请参阅 sendmail_path 的文档w3schools.com/php/php_ref_mail.asp @cghislai 关心解释一下如何? 只指定发送邮件路径。当我在 docker 容器中运行它时,我让它指向 ssmtp 二进制文件。 PHP mail() 函数就像一个魅力,将邮件转发到后缀 SMTP 服务器。

以上是关于在 Linux 上使用带有 SMTP 服务器的默认 PHP 邮件功能的主要内容,如果未能解决你的问题,请参考以下文章

linux邮件服务

Linux 通过smtp 发送邮件

带有多个 SMTP 服务器的 Rails ActionMailer

使用 localhost SMTP 发送邮件

带有 XAMPP 的 SMTP 服务器?

使用带有 Laravel 的 Outlook / Office365 发送电子邮件 - 无法在 SMTP 服务器上进行身份验证