【问题标题】:How can I use PHP Mail() function within PHP-FPM? On Nginx?如何在 PHP-FPM 中使用 PHP Mail() 函数?在 Nginx 上?
【发布时间】:2012-10-23 00:08:36
【问题描述】:

我已经到处搜索了这个问题,我真的想解决这个问题。过去,我最终只使用了像 SendGrid for PHP 这样的 SMTP 服务和像 SwiftMailer 这样的邮件插件。不过我想用PHP。

基本上是我的设置(我是服务器设置的新手,这是我在tutorial 之后的个人设置)

Nginx
Rackspace Cloud
PHP 5.3 PHP-FPM
Ubuntu 11.04

我的phpinfo() 返回有关邮件条目的信息:

mail.log                     no value
mail.add_x_header            On
mail.force_extra_parameters  no value

sendmail_from   no value
sendmail_path   /usr/sbin/sendmail -t -i

SMTP        localhost
smtp_port   25

有人可以帮我解释为什么Mail() 不起作用 - 我的脚本在所有其他网站上都可以运行,这是一个普通的邮件命令。我需要在服务器上设置日志或启用一些 PHP 端口吗?

我的示例脚本

<?
    # FORMS VARS

    // $to = $customers_email;
    // $to = $customers_email;

    $to = $_GET["customerEmailFromForm"];

    $subject = "Thank you for contacting Real-Domain.com";
    $message = "
    <html>
    <head>
    </head>
    <body>
    Thanks, your message was sent and our team will be in touch shortly.
    <img src='http://cdn.com/emails/thank_you.jpg' />
    </body>
    </html>
    ";
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: <real-email@real-domain.com>' . "\r\n";

    // SEND MAIL
    mail($to,$subject,$message,$headers);

?>

谢谢

【问题讨论】:

  • 检查 phpinfo() 是个好主意,你让我意识到我忘记重新启动 fpm 服务来纠正我在 php.ini 中犯的错误(在花了三天时间处理 sendmail 配置更改之后! )

标签: email nginx php


【解决方案1】:

由于sendmail_from 没有值,您需要在php.ini 中设置一个:

sendmail_from = "you@example.com" 

或者当你调用mail时在标题中:

mail($to, $subject, $message, 'From: you@example.com');

电子邮件地址应遵循 RFC 2822,例如:

  • you@example.com
  • You &lt;you@example.com&gt;

如果失败了,您是否真的安装了一个正常工作的电子邮件系统?

如果没有,可以使用以下命令安装 postfix:

sudo apt-get install postfix

有关在 Ubuntu 中配置用于 PHP 的 postfix 的更多信息,请参见下文:

https://serverfault.com/questions/119105/setup-ubuntu-server-to-send-mail

【讨论】:

  • 这必须是真实地址吗?
  • 不,前提是您不想收到回复。
  • 您示例中的电子邮件地址不符合 RFC2822,请参阅更新的答案以获取有效示例。
  • 有关安装/配置电子邮件的信息,请参阅更新的答案。
  • sudo apt-get install postfixsudo apt-get install mail 已修复此问题!太感谢了。重复
【解决方案2】:

如果发现在带有 nginx 和 PHP-FPM(没有 apache)的 Ubuntu 14.04 的新安装中,postfix 和 mailutils 都没有安装。

我用过: sudo apt-get install postfix

(在推荐的答案中)

sudo apt-get install mailutils

让一切都在我的服务器上运行。两者都是必需的。 PHP.ini 中的条目(如推荐答案中所述)可能也有帮助,但如果没有其他两个包,它不会有什么不同。

【讨论】:

  • 感谢您的反馈和见解
  • 不客气。设置完成后,我发现来自我服务器的邮件没有传递到我的主电子邮件域(尽管它被传递到了其他域)。事实证明,postfix 将(默认情况下)尝试在本地传递邮件。解决此问题的方法是从
  • 哎呀!早点撞到“添加评论”按钮...修复是从该文件中的mydestination参数中删除域名:/etc/postfix/main.cf
  • 谢谢...将 +1 消息。干杯
  • 这个对我有用,不过我不需要在 php.ini 中做任何配置。
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
相关资源
最近更新 更多