【发布时间】:2010-12-21 23:26:59
【问题描述】:
有谁知道你是否可以配置 php 的 mail() 命令使其只使用 SMTP 服务器而不是本地 sendmail?我们在将电子邮件标记为垃圾邮件时遇到问题。
我们的服务器正在运行 RedHat 5 Enterprise。
我知道充当 SMTP 客户端的各种 PHP 库,但我宁愿配置 PHP,以便 mail() 直接使用 SMTP 服务器。
【问题讨论】:
有谁知道你是否可以配置 php 的 mail() 命令使其只使用 SMTP 服务器而不是本地 sendmail?我们在将电子邮件标记为垃圾邮件时遇到问题。
我们的服务器正在运行 RedHat 5 Enterprise。
我知道充当 SMTP 客户端的各种 PHP 库,但我宁愿配置 PHP,以便 mail() 直接使用 SMTP 服务器。
【问题讨论】:
根据this manual page,仅在 Windows 上是可能的。
【讨论】:
检查这些链接:
例子:
更新:您可以使用它,但它会在每个调用的 mail() 函数上打开和关闭 SMTP 套接字。
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
【讨论】:
不,原因是所有 Linux/Unix 系统都应该有一个“sendmail”工具。这样做的好处是,这个外部工具可以处理超时或无响应的 SMTP 服务器,因此更有可能真正发送邮件。 Windows 的 SMTP 客户端实现是针对“sendmail”不存在这一事实的解决方法。
我的方法是使用与 sendmail 兼容的工具,该工具仅使用 SMTP 与另一台服务器通信。一个简单的工具是 ssmtp(来源可用 here)
【讨论】:
只需将您的本地 sendmail 配置为使用您的上游邮件服务器作为中继!这样,您就不必在 PHP 端更改 任何内容。
使用 SMTP 直接从 PHP 发送邮件不是一个好主意,因为这样会丢失从错误处理到排队的所有内容!
【讨论】:
您可以使用 PEAR Mail 包直接通过 SMTP 发送。您还需要安装 Net_SMTP 才能使 SMTP 邮件正常工作。在许多服务器上,这些都是默认安装的。您还可以在本地下载这些库的副本并将它们上传到您站点的目录或包含路径。这不是一个理想的解决方案,但它很实用。
如果您正在寻找旧的 mail() 函数的直接替代品,但它通过 SMTP 而不是 PHP 默认发送,您需要编写一个转换器函数,以正确的顺序设置所有参数等等。这里有一个这样的脚本示例——显然你必须修改它以匹配你想要的设置:http://tltech.com/info/php-mail-via-smtp/
【讨论】: