php - 在 Centos 6.4 和 Nginx 服务器上使用 PHP 发送电子邮件

标签 php email nginx centos

这个问题在这里已经有了答案:





PHP mail function doesn't complete sending of e-mail

(30 个回答)


5年前关闭。




请不要将此标记为重复问题。我已经尝试了推荐的步骤(检查错误日志、检查语法、标题信息……等等)来排除 mod 指向我的问题并且所有这些步骤都不起作用。我收到了一个许可问题,我似乎不知道为什么。我得到的错误是:

“11 月 13 日 14:19:08 centos64 sendmail[6611]: uADJJ80J006611: SYSERR(nginx): queueup: 无法创建队列文件./qfuADJJ80J006611, euid=498, fd=-1, fp=0x0: Permission denied ~"

原始信息:

在 nginx centOS 6.4 服务器上使用 PHP 发送电子邮件需要一些帮助。我是新手,所以想先验证我当前的设置是否正确,并在开始调整配置文件之前诊断出确切的问题。

目标:我希望能够向我的 SQL 数据库中的所有用户发送电子邮件警报等。所以最终,如果我有一个庞大的用户群,我可能会发送很多电子邮件。

在我的 php.ini 文件中,我看到..

sendmail_path = /usr/sbin/sendmail -t -i

我用过命令
/etc/init.d/postfix status

验证 postfix 是否已安装并且也是最新的(yum -y install postfix,或其他任何内容)

我正在查看这个有用的线程( http://www.webhostingtalk.com/showthread.php?t=1238442 )并希望遵循本指南( http://www.server-world.info/en/note?os=CentOS_6&p=mail )但同样,在我得到指导之前,我不想开始弄乱东西。

我尝试使用以下代码发送邮件,只是访问了我服务器上的 email.php 页面,但没有收到我的测试电子邮件。尝试从 gmail 电子邮件地址发送测试电子邮件。
<?php $to      = 'GMAIL_EMAIL@gmail.com';
$subject = 'Testing';
$message = 'Hello';
$headers = 'From: GMAIL_EMAIL@gmail.com' . "\r\n" .
'Reply-To: GMAIL_EMAIL@gmail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

像往常一样,任何和所有的帮助表示赞赏。谢谢!

解决方案:
  • 我使用了命令
  • sudo setsebool -P httpd_can_sendmail 1sudo setsebool -P httpd_can_network_connect 1
    然后消息位于未发送的 clientmqueue 文件夹中,所以我查看了/var/log/maillog 并看到一条消息说..
    'centos64 postfix/smtp[22..7]: connect to gmail-smtp-in.l.google.com[....]:25: Network is unreachable' 所以我用谷歌搜索了错误信息并读到我需要安装 cyrus plain..
    yum install cyrus-sasl-plain
    

    希望这可以帮助其他人在同一条船上。

    最佳答案

    我给出了一些简单的选项,它们可能涵盖了所有可能的情况。

    您关注的内容

    阅读您所遵循方式的旧答案 - PHP mail function not working on Centos server

    使用 PHP 库自行托管

    这是 PHPMailer 的 Github repo 示例 -- https://github.com/PHPMailer/PHPMailer自托管电子邮件的第二个选项 http://swiftmailer.org是众所周知的。按照他们的基本指南并使用此代码段:

    <?php
    require_once 'swift/lib/swift_required.php';
    
    $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
      ->setUsername('GMAIL_USERNAME')
      ->setPassword('GMAIL_PASSWORD');
    
    $mailer = Swift_Mailer::newInstance($transport);
    
    $message = Swift_Message::newInstance('Example Subject')
      ->setFrom(array('some@some-mail.com' => 'Example'))
      ->setTo(array('abc@another-mail.com'))
      ->setBody('This is an Example Mail.');
    
    $result = $mailer->send($message);
    ?>
    

    自托管的其他方式是使用 Pear Mail。

    事务性电子邮件服务

    您可以使用 SendGrid 等服务,而不是自托管邮件服务器,https://sendgrid.com/pricing/通过 HTTP 发送电子邮件(我们可以关闭邮件端口以提高安全性)。有很多这样的服务。它们就像 swiftmailer.org您需要一个 PHP 库和 PHP 片段,但它们托管的是电子邮件,而不是您的服务器 -- https://github.com/sendgrid/sendgrid-php

    关于php - 在 Centos 6.4 和 Nginx 服务器上使用 PHP 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40571085/

    相关文章:

    php - Godaddy cron 作业只发送一封电子邮件

    java - 发送带有附件的电子邮件

    angularjs - 当 Angular js应用程序在nginx代理传递中提供服务时,相对路径问题

    docker - 如何修复mysql错误日志中的 "mbind: Operation not permitted"

    ruby-on-rails - 公共(public)/图像中的文件出现奇怪的错误 "403 Forbidden"

    php - Zend Framework TDG 与 Doctrine

    javascript - 在 javascript 中将数组映射到对象中的键

    php - 创建一个FTP下载过程

    javascript - json_encode() 中的 json 无效

    email - 以 Velocity 方式返回电话号码的最后 4 位