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

我在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" 

这很奇怪,因为:

  • 它明确表示“仅用于Unix”
    • 我不断看到教程说,使用这一行的Windows,和
    • 示例文件path在Unix中甚至没有意义
  • sendmail_path默认被注释掉

我想知道是否sendmail.exe是必要的。 所以在我的自定义Apache服务器上,它没有sendmail.exe ,我编辑了php.ini来为SMTPsmtp_portsendmail_from添加正确的信息。 这样,就能发送邮件了! 但是速度很慢。

然后我回到了XAMPP服务器,并重新命名了sendmail目录,希望禁用sendmail。 这种工作 – 我的PHP脚本声称已经发送,但没有发生。

所以我很困惑。

  • 我的XAMPP服务器有sendmail_path注释掉,但显然仍然使用它指向的程序。 它是如何知道的?
  • 我的Apache服务器在sendmail_path中没有任何东西,但可以以某种方式发送没有它的邮件。 它是如何做到的?

我真的需要做些什么来configurationApache服务器来发送电子邮件?

经过进一步的search和testing,看来:

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

  2. 但是,这样做效率低下,速度慢。

  3. 在服务器机器上设置假发送邮件 ,并将php.inisendmail_path指令指向它,使得发送电子邮件的速度更快。 就我个人而言,我想象sendmail.exe将数据咀嚼成漂亮易消化的部分,然后像喂养宝宝的母亲一样将它们吐在邮件服务器的嘴里。 嗯! 但也许我疯了。

  4. 如果将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文件中。