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

时间:2016-11-13 06:05:51

标签: php email nginx centos

请不要将此标记为重复问题。我已经尝试了建议的步骤(检查错误日志,检查语法,标题信息等等)来解决mod指向我的问题,并且所有这些步骤都不起作用。我收到了一个允许的问题,我似乎无法弄清楚原因。我得到的错误是:

“11月13日14:19:08 centos64 sendmail [6611]:uADJJ80J006611:SYSERR(nginx):队列:无法创建队列文件./qfuADJJ80J006611,euid = 498,fd = -1,fp = 0x0:权限被拒绝〜 “

原始消息

想要在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);
?>

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

解决方案:

  1. 我使用了命令
  2. sudo setsebool -P httpd_can_sendmail 1

    sudo setsebool -P httpd_can_network_connect 1

    然后消息被放在clientmqueue文件夹中没有被发送,所以我查看了/ var / log / maillog并看到一条消息说... 'centos64 postfix / smtp [22..7]:连接到gmail-smtp-in.l.google.com [....]:25:网络无法访问'所以我用Google搜索了错误消息并阅读了我需要的内容安装cyrus plain ..

    yum install cyrus-sasl-plain
    

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

1 个答案:

答案 0 :(得分:0)

我提供了一些简单的选项,可能涵盖所有可能的情况。

您关注的是

阅读旧答案,了解您的关注方式 - 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。

交易电子邮件服务

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