PHP mail()无法发送到内部地址

时间:2011-07-13 14:03:40

标签: php email email-integration

我正在尝试发送密码重置链接,以便用户忘记密码登录我正在创建的系统。问题是,smtp服务器应该不在我的系统托管的服务器上配置。因此,每当我尝试使用php mail()函数向内部电子邮件地址发送电子邮件时,电子邮件无法发送,但在电子邮件地址之外(使用gmail帐户测试),电子邮件将通过。我相信这是因为我的服务器直接发送到互联网而不是通过内部smtp服务器来解决应该发送我们的域电子邮件的位置。我想知道是否有人知道如何在Xserve上配置它,或者他们是否知道如何具体告诉php mail()函数最初发送电子邮件的位置。任何帮助或指向正确的方向将是非常有帮助的。

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用it's settings控制mail()

这可能无法解决您的整体问题,但希望它有用。这related answer has more information

答案 1 :(得分:1)

mail()不发送邮件,只是将事情交给本地SMTP服务器。它不会联系收件人的服务器来传递邮件。在现实世界中,mail()会将您的信件沿着街道行走并将其放入邻居邮箱中。在那之后,它绝对与邮件传递无关。

检查本地SMTP服务器的日志,了解本地邮件未送达的原因。应该有一两行说明为什么要注册。也许本地MTA(邮件传输代理,又称本地“邮件人”)配置不正确。

答案 2 :(得分:0)

我们刚才在内部解决了这个问题。希望这对你也有帮助。

我们的环境:

  • Ubuntu 12.04 LTS
  • PHP 5.3.10

我们可以telnet到我们的SMTP服务器并从我们的Web服务器发送邮件,因此它不是权限问题。尝试外部邮件时,一切都很完美。在尝试内部邮件时,无声失败。

我们的PHP使用的是sendmail,默认情况下会尝试将邮件中继到127.0.0.1。通过编辑/etc/mail/sendmail.cf将其指向SMTP服务器。更新以下行:

# "Smart" relay host (may be null)
DS

# "Smart" relay host (may be null)
DSyour.smtp.server.com

重启sendmail并尝试通过PHP发送电子邮件。

答案 3 :(得分:0)

Parellels的PLESK服务器管理软件就是这种情况。

找到PostFix的'main.cf'配置文件,适用于CentOS 6,位于

 /etc/postfix/main.cf

如果找不到,请执行

 which postfix

SSH命令至少可以查看服务器上Postfix的位置。

然后,通过文本编辑器或Linux shell打开文件,并创建这些行(应该在文件的末尾,在677行左右):

virtual_mailbox_domains = $virtual_mailbox_maps, hash:/var/spool/postfix/plesk/virtual_domains
virtual_alias_maps = $virtual_maps, hash:/var/spool/postfix/plesk/virtual
virtual_mailbox_maps = hash:/var/spool/postfix/plesk/vmailbox

这样评论:

#virtual_mailbox_domains = $virtual_mailbox_maps, hash:/var/spool/postfix/plesk/virtual_domains
#virtual_alias_maps = $virtual_maps, hash:/var/spool/postfix/plesk/virtual
#virtual_mailbox_maps = hash:/var/spool/postfix/plesk/vmailbox

然后,重新启动Postfix服务

sudo service postfix restart

Apache在你的时候(不能伤害),瞧!您的电子邮件地址应该立即收到这些电子邮件。这也不会影响您的任何常规电子邮件或其他任何内容。