简体   繁体   中英

SMTP ERROR: Failed to connect to server: Permission denied (13)

Good day!

Im trying to make my phpmailer work in my shared hosting (freehostia.com) and I always get this error. The username and password of my gmail is correct, and the rest of the settings is like this:

$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 is uncommented in the php.ini also. Am I missing something here? Thank you.

Complete error message:

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

Let's get to the answer first of all! Try with the following command:

$ getsebool httpd_can_sendmail

if it shows: httpd_can_sendmail --> off

switch it on with this:

$ sudo setsebool -P httpd_can_sendmail 1

then try sending the email again.

This solution comes from this great page .

As it was pointed out from this article, you may also need to try sudo setsebool -P httpd_can_network_connect 1 . While for my CentOS 7 vm hosted by DigitalOcean, it's not necessary.

The problem I met was failing to send out emails from a Drupal website, with the SMTP Authentication Support module, which relies on PHPMailer underneath. And the SMTP server used was Google.

BTW, I had suspected it was OpenSSL certificate problem and did some test but no luck. So by setting the $SMTPDebug level to 2 from the PHPMailer source code, I was able to capture the "Permission denied (13)" error message.

This suggests that fopen wrappers or socket functions are disabled in your PHP installation. Not unusual in shared hosting. Running phpinfo() should tell you.

You can probably use $mail->isMail(); and skip the auth to send via the ISP's mail server instead of SMTP, but beware of SPF issues.

Thanks for this solutions, it helped me. I just moved my project to new server, while testing I found that mail functio

问题是 freehostia 的免费托管会阻止发出的邮件。

Freehostia blocks the list below in the free plan. (Chocolate)

-mailer

-curl

-soap get

-xml get

this is important for http

  • getsebool httpd_can_sendmail is Off then turn On it sudo setsebool -P httpd_can_sendmail 1
  • may need sudo 'setsebool -P httpd_can_network_connect 1'
  • disable_function = ...... delete exec for exec() in php.ini
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

if this not working than try bellow for php code.

mail($to,$subject,$message);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM