我目前有一个带有 Slicehost 的 VPS,我无法使用 PHP 函数 mail 从我的服务器发送电子邮件。我的服务器运行 Centos 5.2、Apache 2、PHP 5.2 和 MySQL 5。我对服务器/电子邮件了解不多,但我认为问题在于我缺少一些明显的软件包,例如 postfix、dovecot...
我目前有指向 Rackspace 电子邮件的 MX 记录。另外,我不希望我的电子邮件被标记为垃圾邮件,不知道需要做什么才能避免这种情况。
谢谢,
本
答案1
我对 CentOS 并不十分熟悉,但 Ubuntu 默认不带 SMTP 服务器。sSMTP 是安装和使用起来比较简单的服务器,我相信它位于 CentOS 的存储库下。sSMTP 仅用于发送邮件,我认为它不支持用户身份验证或内部邮箱,就像 Postfix 或 QMail 等功能更全面的 SMTP 服务器一样。
不过,使用 PHP 发送邮件还是不错的。我还相信您可以在 /etc 中配置 sSMTP,以将电子邮件转发到另一个 MX 邮件服务器。
更多信息:
答案2
请原谅我的回答有些冗长,我只是想说得透彻一些。:) 按照你的问题的顺序:
发送电子邮件
PHP mail() 函数调用本地sendmail
命令,大多数 MTA 会用自己的二进制文件包装器替换该命令。大多数发行版还会使用默认设置干净地安装所选的 MTA,以便开箱即用。
MTA正在运行
似乎默认 CentOS 5 MTA是 sendmail。第一个问题是为什么sendmail 似乎没有在您的机器上运行 - 您是否特意选择不安装它,或者这不是您的选择?假设 Slicehost没有删除它,您仍然需要确认为什么/如果它没有运行:
# rpm -qa | grep sendmail
如果输出显示没有安装 sendmail,您可以对 postfix 和 exim(CentOS 上的其他可能的 MTA)执行相同的操作:
# rpm -qa | grep 'postfix\|exim'
如果没有安装,我建议从 CentOS 软件包安装 postfix年龄变化率。
如果 MTA是安装,检查是否是跑步:
# ps aux | grep 'post\|exim\|send'
# netstat -nupt -l | grep 25
如果没有正在运行的进程,并且没有任何东西在监听端口 25,但软件包似乎已安装,请检查是否存在相关 MTA 的初始化脚本:
# ls -alh /etc/init.d/{send,post,exim}*
如果没有,您需要删除 RPM 并重新安装,因为如果这是自定义安装,则无法知道哪些地方被弄乱了,哪些地方没有被弄乱。如果确实如此,请尝试启动它:
# /etc/init.d/postfix start
此输出应能帮助您诊断是否存在任何问题,否则它将毫无问题地启动并执行网络状态再次或 telnet 到端口 25 应该显示它在监听。如果有问题,那么我建议您在此网站上寻求帮助或与 Slicehost 联系。如果一切正常,最后一件事是确保 init 脚本在启动时被加载:
# chkconfig --list postfix
输出将列出命名的 init 脚本的运行级别,虽然每个发行版都不同,但您应该主要在运行级别数字旁边看到“on”,类似于:
# postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如果您看到太多“off”,请继续添加默认运行级别:
# chkconfig postfix on
MX、垃圾邮件等
MX 是 Mail eXchange DNS 记录 - 在本讨论中,它与发送邮件无关。它由其他各方试图发送邮件给你。关于垃圾邮件——这也不是你能控制的事情。想象一下,任何能访问 *nix 机顶盒的人都可以将他们的外发邮件标记为“非垃圾邮件”……
更多信息
最后,我应该开始的部分:假设问题不是 MTA 问题,您需要提供更多的任何人都可以为您提供帮助。是的,您无法发送邮件,但是什么症状是什么?PHP 是否给出了错误响应?如果是,是什么?如果没有,您是否启用了完整调试输出?您是否看到了任何事物在任何服务器日志中都有吗?等等。
希望这可以帮助。