我正在 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
正确信息。这样,它就可以发送邮件了!但速度非常慢。SMTP
smtp_port
sendmail_from
然后我回到 XAMPP 服务器并重命名sendmail
目录,希望禁用 sendmail。这种方法有点奏效 - 我的 PHP 脚本声称已发送,但什么也没发生。
所以我很困惑。
- 我的 XAMPP 服务器已
sendmail_path
注释掉,但显然仍在使用它指向的程序。它怎么知道的? - 我的 Apache 服务器中没有任何内容
sendmail_path
,但即使没有它也可以发送邮件。它是如何做到的?
我实际上需要做什么来配置 Apache 服务器来发送电子邮件?
答案1
经过进一步的搜索和测试,结果显示:
在 Windows 上,PHP 的 mail() 函数不一定需要将电子邮件传递给同一台计算机上的另一个程序;它可以自行连接到邮件服务器
然而,这是低效且缓慢的。
配置伪造的 sendmail在服务器机器上并将
php.ini
的sendmail_path
指令指向它,可以更快地发送电子邮件。就我个人而言,我想象sendmail.exe
将数据咀嚼成易于消化的碎片,然后像母鸟喂养婴儿一样吐进邮件服务器的嘴里。嗯!但也许我疯了。如果你输入
sendmail.exe
,C:\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。