PHP 电子邮件问题

PHP 电子邮件问题

我目前有一个带有 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 邮件服务器。

更多信息:

http://www.linux.com/archive/feature/132006

答案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 是否给出了错误响应?如果是,是什么?如果没有,您是否启用了完整调试输出?您是否看到了任何事物在任何服务器日志中都有吗?等等。

希望这可以帮助。

相关内容