【问题标题】:PHP mail() failing to send to internal addressesPHP mail() 无法发送到内部地址
【发布时间】:2011-07-13 14:03:40
【问题描述】:

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

谢谢!

【问题讨论】:

标签: php email


【解决方案1】:

mail() 不发送邮件,它只是将事情交给本地 SMTP 服务器。它不会联系收件人的服务器来传递邮件。在现实世界中,mail() 将您的信件带到街上并将其放入附近的邮箱。在那之后,它就完全与邮件传递无关了。

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

【讨论】:

  • 我认为问题是在这个 Xserve 上没有配置 smtp 服务器。假设电子邮件被直接发送到互联网以直接解析那里的域地址,而不是本地。你有什么方向可以让我看看这是否是问题(即在哪里检查 Xserve 上的本地 SMTP 服务器设置)?谢谢
  • mail() 无法向外部发送内容。显然 OS X 在内部使用 Postfix,所以请检查 /etc/postfix 的设置,看看 OS X 的 /var/log 是否有任何内容用于邮件(邮件日志?)
【解决方案2】:

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

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

【讨论】:

  • 我正在使用 Xserve (Mac) 而不是 Windows 服务器。 SMTP 规范的 mail() 设置似乎适用于 Windows 系统。如何为 Mac 指定 SMTP 设置?
  • @Brett Cohen:我认为你不能在 PHP 的配置中。那是您的系统配置,具体请参见sendmail_path PHP ini setting
【解决方案3】:

我们只是在内部解决了这个问题。希望这对您也有帮助。

我们的环境:

  • Ubuntu 12.04 LTS
  • PHP 5.3.10

我们可以远程登录到我们的 SMTP 服务器并从我们的网络服务器发送邮件,所以这不是权限问题。尝试向外部发送邮件时,一切正常。尝试在内部发送邮件时,静默失败。

我们的 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 向自己发送电子邮件。

【讨论】:

    【解决方案4】:

    这发生在 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 在您使用时(不会受伤),瞧!您的电子邮件地址现在应该正在接收这些电子邮件。这也不会影响您的任何常规电子邮件或其他任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 2016-02-02
      • 2011-05-23
      • 1970-01-01
      • 2015-02-02
      相关资源
      最近更新 更多