PHPmailer + gmail

I am using the latest version of PHPMailer to fire Email using my Gmail account, this application runs locally, below my code (copied from PHPMailer's own GitHub talking about sending to Gmail):

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "[email protected]";
$mail->Password = "xx";
$mail->setFrom('[email protected]', 'First Last');
$mail->addAddress('[email protected]', 'John Doe');
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->Body = 'This is a plain-text message body';
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

But from the error, this one:

2018-06-29 20:15:09 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP d18-v6sm6204628qtl.32 - gsmtp
2018-06-29 20:15:09 CLIENT -> SERVER: EHLO localhost
2018-06-29 20:15:09 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [189.120.238.241]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250 SMTPUTF8
2018-06-29 20:15:09 CLIENT -> SERVER: STARTTLS
2018-06-29 20:15:09 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
SMTP Error: Could not connect to SMTP host.
2018-06-29 20:15:10 CLIENT -> SERVER: QUIT
2018-06-29 20:15:10 SERVER -> CLIENT: 
2018-06-29 20:15:10 SMTP ERROR: QUIT command failed: 
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

What else can I try?

PS: allow less secure apps is already marked as enabled in Gmail

Author: caiocafardo, 2018-06-29

1 answers

The main error message is this:

SMTP Error: Could not connect to SMTP host.

This can occur for several reasons:

  • your server/hosting network is blocking access to smtp.gmail.com
  • some firewall or proxy is preventing you from communicating with the smtp.gmail.com
  • some proxy is preventing your Network (if the test is local) from using secure connections

However the most likely problem is that your hosting or local PHP is not with the SSL extension enabled, IE PHP will only be able to communicate with unsecured connections, to fix this problem go to php.ini and uncomment this line (if it is PHP 5 and 7.1):

Windows (and windows server):

;extension=php_openssl.dll

Leaving like this:

extension=php_openssl.dll

Linux:

;extension=openssl.so

Leaving like this:

extension=openssl.so

If it is php 7.2 , both linux and windows and Mac the line is only like this:

;extension=openssl

Uncomment like this:

extension=openssl

Then save the document and restart Apache (or Lightttpd or Nginx) and FastCGI (if your server uses this, it usually restarts by itself, but depends on how you configured it).

Then create a file named phpinfo.php and put this:

<?php
var_dump(extension_loaded('openssl'));

Then notice if this appeared:

bool(true)

If it appears:

bool(false)

Is because you forgot something, or edited the wrong php.ini (some servers have more than one for different things).

 1
Author: Guilherme Nascimento, 2018-06-30 01:20:11