如何设置 PHP 在 Apache 上发送电子邮件?(Windows)

如何设置 PHP 在 Apache 上发送电子邮件?(Windows)

我正在 Windows 上设置 Apache 服务器 (2.2.14),并借鉴了现有 XAMPP 配置中的想法。我现在正在尝试为 PHP (5.3.1) 设置电子邮件功能。(它需要能够处理附件,就像 XAMPP 服务器一样。)

我注意到 XAMPP 自带了适用于 Windows 的伪造 sendmail,但配置中的一些内容对我来说没有意义。

以下是 XAMPP 中的几行php.ini

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

这很奇怪,因为:

  • 它明确指出“仅适用于 Unix”,但是
    • 我一直看到教程说在 Windows 上使用此行,并且
    • 示例文件路径在 Unix 中甚至没有意义
  • sendmail_path默认被注释掉

我不知道是否sendmail.exe有必要。因此,在我自定义的 Apache 服务器上(没有)sendmail.exe,我进行了编辑,添加了、和 的php.ini正确信息。这样,它就可以发送邮件了!但速度非常慢。SMTPsmtp_portsendmail_from

然后我回到 XAMPP 服务器并重命名sendmail目录,希望禁用 sendmail。这种方法有点奏效 - 我的 PHP 脚本声称已发送,但什么也没发生。

所以我很困惑。

  • 我的 XAMPP 服务器已sendmail_path注释掉,但显然仍在使用它指向的程序。它怎么知道的?
  • 我的 Apache 服务器中没有任何内容sendmail_path,但即使没有它也可以发送邮件。它是如何做到的?

我实际上需要做什么来配置 Apache 服务器来发送电子邮件?

答案1

经过进一步的搜索和测试,结果显示:

  1. 在 Windows 上,PHP 的 mail() 函数不一定需要将电子邮件传递给同一台计算机上的另一个程序;它可以自行连接到邮件服务器

  2. 然而,这是低效且缓慢的。

  3. 配置伪造的 sendmail在服务器机器上并将php.inisendmail_path指令指向它,可以更快地发送电子邮件。就我个人而言,我想象sendmail.exe将数据咀嚼成易于消化的碎片,然后像母鸟喂养婴儿一样吐进邮件服务器的嘴里。嗯!但也许我疯了。

  4. 如果你输入sendmail.exeC:\usr\bin这将允许一些预期在基于 Unix 的操作系统上运行的程序在 Windows 上运行

这是PHP 手册中的一些信息这帮助我解决了这个问题。

注意:mail() 的 Windows 实现与 Unix 实现在很多方面都不同。首先,它不使用本地二进制文件来编写消息,而只在直接套接字上运行,这意味着需要 MTA 监听网络套接字(可以是本地主机,也可以是远程计算机)。

和...

注意:值得注意的是,mail() 函数不适用于循环发送大量电子邮件。此函数会为每封电子邮件打开和关闭一个 SMTP 套接字,效率不高。有关发送大量电子邮件的信息,请参阅 » PEAR::Mail 和 » PEAR::Mail_Queue 包。

答案2

Apache 实际上并不参与任何发送电子邮件的配置。这完全由 PHP 和本地 MTA 处理。MTA 几乎总是 Sendmail 或 Postfix。此配置位于 php.ini 文件中的 [mail function] 部分下,名为 sendmail_path。

相关内容