我有一台服务器,在过去两年中一直在使用 PHP 的 mail() 函数发送电子邮件。它运行的是 Windows Server 2003。我在同一个本地网络上还有另一台服务器,运行的是 Ubuntu 10.10。有没有办法让执行的 PHP 脚本将电子邮件转储到 Windows 的 SMTP 文件夹中以便发出?
更新:我将保留上述内容,以便其他答案有意义,但仅供澄清,以下是我想做的事情。通过 Ubuntu 服务器上的 cron 执行 PHP 脚本,该脚本将读取数据库并通过 PHP 的 mail() 将电子邮件转储到其 SMTP 队列中,然后该脚本将电子邮件转发到 Windows 服务器,该服务器实际上会发送电子邮件。
答案1
您可以配置 Windows 框以允许从 ubunto 框进行邮件中继,而不是将文件转储到 smtp 文件夹中
答案2
向下看http://php.net/manual/en/function.mail.php(在“注释”下),您可以使该mail()
函数直接与在远程主机上运行的邮件传输代理进行对话(尽管根据文档,奇怪的是,此功能似乎是 Windows 实现所独有的,所以如果您需要将脚本移动到另一个平台,您需要记住这一点......)
php.ini
在Windows 主机上尝试此操作:
[mail function]
SMTP = yourubuntumachine.domain.com; for Win32 only
smtp_port = 25
当然,您需要在 Ubuntu 主机上运行某种 MTA,但安装(比如说)Exim(在exim4-daemon-light
包中)并将其配置为仅从您的 Windows 机器中继邮件就很简单了。
答案3
这是我为解决这个问题所做的事情,因为我不清楚,而其他答案都是倒退的(我的错)。
我根据本指南在 Ubuntu 机器上设置了 ssmtp:http://www.davidhurst.co.uk/2007/06/19/php-mail-and-ssmtp-on-debian-linux/。它涉及编辑 ssmtp.conf 文件,并编辑 php.ini 以使用不同的 sendmail_path。
然后,我配置了 MailEnable,即在 Windows 上运行的 SMTP 服务器,以允许传入的中继连接。
我重新启动了 Apache,现在当我从 Ubuntu 框中运行 PHP mail() 时,它们会被中继到 Windows SMTP 服务器并发送出去。