我在Windows上设置了一个Apache服务器(2.2.14),并借鉴了现有的XAMPPconfiguration。 我正在尝试为PHP(5.3.1)设置电子邮件function。 (它需要能够处理附件,就像XAMPP服务器一样。)
我注意到,XAMPP带有虚假的Windows sendmail ,但有关configuration的一些事情对我来说没有意义。
以下是XAMPP的php.ini
中的几行代码:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"
这很奇怪,因为:
sendmail_path
默认被注释掉 我想知道是否sendmail.exe
是必要的。 所以在我的自定义Apache服务器上,它没有sendmail.exe
,我编辑了php.ini
来为SMTP
, smtp_port
和sendmail_from
添加正确的信息。 这样,就能发送邮件了! 但是速度很慢。
然后我回到了XAMPP服务器,并重新命名了sendmail
目录,希望禁用sendmail。 这种工作 – 我的PHP脚本声称已经发送,但没有发生。
所以我很困惑。
sendmail_path
注释掉,但显然仍然使用它指向的程序。 它是如何知道的? sendmail_path
中没有任何东西,但可以以某种方式发送没有它的邮件。 它是如何做到的? 我真的需要做些什么来configurationApache服务器来发送电子邮件?
经过进一步的search和testing,看来:
在Windows上,PHP的mail()函数不一定需要将电子邮件发送到同一台计算机上的另一个程序; 它可以自己连接到邮件服务器
但是,这样做效率低下,速度慢。
在服务器机器上设置假发送邮件 ,并将php.ini
的sendmail_path
指令指向它,使得发送电子邮件的速度更快。 就我个人而言,我想象sendmail.exe
将数据咀嚼成漂亮易消化的部分,然后像喂养宝宝的母亲一样将它们吐在邮件服务器的嘴里。 嗯! 但也许我疯了。
如果将sendmail.exe
放到C:\usr\bin
,这就允许一些希望在基于Unix的操作系统上运行的程序在Windows上运行
以下是帮助我解决这个问题的PHP手册中的一些信息 。
注意:mail()的Windows实现在许多方面与Unix实现有所不同。 首先,它不使用本地二进制组合消息,而只使用直接套接字,这意味着需要在networking套接字(可以在本地主机或远程机器上)监听MTA。
和…
注意:值得注意的是mail()函数不适合循环中的大量电子邮件。 此function打开和closures每个电子邮件的SMTP套接字,这不是很有效。 要发送大量的电子邮件,请参阅»PEAR :: Mail和»PEAR :: Mail_Queue软件包。
Apache并没有真正参与发送邮件的任何configuration。 这完全由PHP和在这种情况下,本地MTA处理。 MTA几乎总是Sendmail或Postfix。 这个configuration是在名为sendmail_path的[mail function]部分下的php.ini文件中。