Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Phpmailer using smtp with Gmail not working - connection timing out

I've looked into the following links:

phpmailer send gmail smtp timeout

send email using Gmail SMTP server through PHP Mailer

http://uly.me/phpmailer-and-gmail-smtp/

...and tried to implement for myself a combination of those however...most of the time it sends this message...

Message could not be sent.

Mailer Error: SMTP connect() failed.

However there was one time where it sent this when I experimented between "tls" and "ssl"...

SMTP ERROR: Failed to connect to server: Connection timed out (110) SMTP connect() failed. Message could not be sent.

Mailer Error: SMTP connect() failed.

My code is attached...did I somehow miss something? I asked the web hosting service if they're blocking and gave them a template of my code - they said the server allows connections to Gmail's SMTP.

    require_once("class.phpmailer.php");
    $mail = new PHPMailer();
    $mail -> IsSMTP();
    $mail -> SMTPDebug = 2;
    $mail -> SMTPAuth = 'true';
    $mail -> SMTPSecure = 'tls';
    $mail -> SMTPKeepAlive = true;
    $mail -> Host = 'smtp.gmail.com';
    $mail -> Port = 587;
    $mail -> IsHTML(true); 

    $mail -> Username = "[email protected]";
    $mail -> Password = "mypassword";
    $mail -> SingleTo = true; 

    $to = xxx;                           
    $from = xxx;
    $fromname = xxx;
    $subject = xxx;
    $message = xxx
    $headers = "From: $from\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";

    $mail -> From = $from;
    $mail -> FromName = $fromname;
    $mail -> AddAddress($to);

    $mail -> Subject = $subject;
    $mail -> Body    = $message;

    if(!$mail -> Send()){
        echo "Message could not be sent. <p>";
        echo "Mailer Error: " . $mail-> ErrorInfo;
        exit;
    }
like image 655
redber2009 Avatar asked Dec 12 '22 10:12

redber2009


2 Answers

I dug into it. Use fsocketopen, which is native to php, to test the connection and eliminate most of the potential problems. Write a simple php page with this:

    $host = "smtp.gmail.com";
    $port = "587";
    $checkconn = fsockopen($host, $port, $errno, $errstr, 5);
    if(!$checkconn){
        echo "($errno) $errstr";
    } else {
        echo 'ok';
    }

You should get back "ok". If not you know you have a connection problem that has nothing to do with Phpmailer. If that's the case it's probably the hosting company. If not then it's probably something simple about the difference between your local host and the hosting company like different versions of php.

I suspect though that this script won't make the connection

like image 57
Casey Avatar answered May 09 '23 18:05

Casey


I had this same problem and solved it:

First, turn on smtp error logging in phpmailer:

    $mail->SMTPDebug  = 2;       // enables SMTP debug information (for testing)

Then retry your phpmailer email send. You will see the entire SMTP conversation on standard error output. If you're using a web server, look in the web server log file.

I could then see the error response from gmail. Gmail was not accepting the login.

The error within the smtp conversation refers to an article. It gives some tips:

  1. Allow less secure apps to use your account.
  2. Login to gmail from a web browser.
  3. Confirm the gmail login captcha. (It may not actually display a captcha to you, but this was the additional step that suddenly allowed my email to go through.)
like image 38
Larry K Avatar answered May 09 '23 18:05

Larry K