0
votes

I know this question has been asked a lot and I've read through most of them.

I'm getting this error when trying to use my Gmail account to send email from PHP using PHP Mailer and WAMP Server.

  1. It was working till yesterday without any problems (since about 3 months).
  2. I have not changed any code in the mailer helper function.
  3. php-openssl.dll is enabled in my wamp settings.
  4. Tried with ssl & 465, Doesn't connect.
  5. I have "Allow less secured apps" turned on in my google settings.
  6. I've tried using gethostbyname(). it doesn't work.
  7. It is working with my organisation's email server, which doesn't use any security.

This is my phpmailer function code. All the settings are being retrieved from the database. As it is a multi user application.

// Email Settings
    $from=$details->from;
    $mailer=$details->mailer;
    $subject=$details->subject;

    $mail = new PHPMailer(true);                                // Passing `true` enables exceptions
    try {
        //Server settings
        $mail->SMTPDebug = $settings->debug;                    // Enable verbose debug output
        $mail->isSMTP();                                        // Set mailer to use SMTP
        $mail->Host = $settings->host;          // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;                                 // Enable SMTP authentication
        $mail->Username = $settings->login;                     // SMTP username
        $mail->Password = $pass;                                // SMTP password
        $mail->SMTPSecure = $settings->security;                // Enable TLS encryption, `ssl` also accepted
        $mail->Port = $settings->port;                          // TCP port to connect to

        //From
        $mail->setFrom($from, $mailer);

        //Recipients
        $mail->addAddress($details->to,$details->recipientName);     // Add a recipient           // Name is optional
        $mail->addReplyTo($from, $mailer);
        foreach($quote->cc as $cc)
        {
            $mail->addCC($cc);
        }
        //Attachments
        foreach($quote->attachments as $file)
        {
            $mail->addAttachment($file);    // Add attachments  // Optional name
        }
        //Content
        $mail->isHTML(true);                                  // Set email format to HTML
        $mail->Subject = $subject;
        $mail->Body    = $message;
        $mail->AltBody = 'Non-HTML Mail Clients Not Supported, Please View This email in a browser or get a HTML friendly Email Client.';
        $mail->send();
    }
    catch (Exception $e)
    {
        $return=array(1,'Error: '.$mail->ErrorInfo);
    }
return $return;
}

The error That I'm getting is

2017-12-04 07:15:26 SERVER -&gt; CLIENT: 220 smtp.gmail.com ESMTP w9sm23070345pfk.16 - gsmtp<br>
2017-12-04 07:15:26 CLIENT -&gt; SERVER: EHLO projects<br>
2017-12-04 07:15:26 SERVER -&gt; CLIENT: 250-smtp.gmail.com at your service, [49.213.37.11]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8<br>
2017-12-04 07:15:26 CLIENT -&gt; SERVER: STARTTLS<br>
2017-12-04 07:15:27 SERVER -&gt; CLIENT: 220 2.0.0 Ready to start TLS<br>
SMTP Error: Could not connect to SMTP host.<br>
2017-12-04 07:15:27 CLIENT -&gt; SERVER: QUIT<br>
2017-12-04 07:15:27 <br>
2017-12-04 07:15:27 <br>
SMTP Error: Could not connect to SMTP host.<br>
[1,"Error: SMTP Error: Could not connect to SMTP host."]

Any help is appreciated.

PS : The settings I'm using are

  1. Host : smtp.gmail.com.
  2. Username and password : I've checked and I can log into my account on gmail web.
  3. Security : tsl
  4. Port : 587.

I doubt if its my code. coz if it was my code, then It would't have worked with my organisation's email server, which is not as sophisticated as gmail.

1

1 Answers

1
votes

i see an error like your question, and i solve my problem by:

  1. Enable extentsion ssl from apache
  2. Update the lastest code from PHPMailer
  3. Add some code:

    $mail->SMTPOptions = array(
    
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
    

    );

And it's work!