SMTP错误:无法连接到服务器:权限被拒绝(13)

时间:2015-11-27 05:53:15

标签: php smtp phpmailer

美好的一天!

我试图让我的phpmailer在我的共享主机(freehostia.com)中工作,我总是得到这个错误。我的Gmail的用户名和密码是正确的,其余的设置是这样的:

$mail = new PHPMailer;

$mail->isSMTP();
$mail->SMTPDebug  = 2;
$mail->Host       = 'tls://smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth   = true; // Enable SMTP authentication
$mail->Username   = 'mymail@gmail.com'; // SMTP username
$mail->Password   = 'mypassword'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port       = 587; // TCP port to connect to

$mail->setFrom('mymail@gmail.com', 'ASAPHOT Administrator'); // Add a recipient
$mail->addAddress('sorianorobertc@gmail.com'); // Name is optional
$mail->addReplyTo('mymail@gmail.com', 'ASAPHOT Administrator');

$mail->isHTML(true); // Set email format to HTML

$mail->Subject = 'it works';
$mail->Body    = 'it works';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if (!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

openssl也在php.ini中取消注释。我在这里错过了什么吗?谢谢。

完整的错误消息:

Connection: opening to smtp.gmail.com:587, timeout=300, options=array ()
SMTP ERROR: Failed to connect to server: Permission denied (13)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

6 个答案:

答案 0 :(得分:4)

首先让我们回答一下!请尝试使用以下命令:

$ getsebool httpd_can_sendmail

如果显示:httpd_can_sendmail --> off

用这个打开它:

$ sudo setsebool -P httpd_can_sendmail 1

然后再次尝试发送电子邮件。

此解决方案来自这个伟大的page

正如本文所指出的,您可能还需要尝试sudo setsebool -P httpd_can_network_connect 1。而对于由DigitalOcean托管的CentOS 7 vm,则没有必要。

我遇到的问题是没有通过SMTP身份验证支持模块从Drupal网站发送电子邮件,该模块依赖于PHPMailer。使用的SMTP服务器是Google。

顺便说一下,我曾怀疑这是OpenSSL证书问题并做了一些测试但没有运气。因此,通过从PHPMailer源代码将$SMTPDebug级别设置为2,我能够捕获“Permission denied(13)”错误消息。

答案 1 :(得分:1)

这表明在PHP安装中禁用了fopen包装器或套接字功能。在共享主机中并不罕见。运行phpinfo()应该告诉你。

您可以使用$mail->isMail();并跳过身份验证通过ISP的邮件服务器而不是SMTP发送,但要注意SPF问题。

答案 2 :(得分:0)

问题在于freehostia的免费托管阻止了收到的邮件。

答案 3 :(得分:0)

Freehostia阻止了免费计划中的以下列表。 (巧克力)

邮件程序

卷曲

-肥皂获得

-xml get

答案 4 :(得分:0)

这对http很重要

  • getsebool httpd_can_sendmail已关闭,然后将其打开 sudo setsebool -P httpd_can_sendmail 1
  • 可能需要sudo'setsebool -P httpd_can_network_connect 1'
  • disable_function = ......删除php.ini中exec()的exec

答案 5 :(得分:-1)

use this
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "ssl://smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port

如果这不起作用,请尝试下面的PHP代码。

邮件($到,$主题,$消息);