28

Am trying to send mail to a gmail address but it keeps on getting this error "SMTP -> ERROR: Failed to connect to server: Connection timed out (110)SMTP Connect() failed. Message was not sent.Mailer error: SMTP Connect() failed." What could be the problem?

        require 'class.phpmailer.php'; // path to the PHPMailer class
        require 'class.smtp.php';

            $mail = new PHPMailer();


            $mail->IsSMTP();  // telling the class to use SMTP
            $mail->SMTPDebug = 2;
            $mail->Mailer = "smtp";
            $mail->Host = "ssl://smtp.gmail.com";
            $mail->Port = 587;
            $mail->SMTPAuth = true; // turn on SMTP authentication
            $mail->Username = "myemail@gmail.com"; // SMTP username
            $mail->Password = "mypasswword"; // SMTP password 
            $Mail->Priority = 1;

            $mail->AddAddress("myemail@gmail.com","Name");
            $mail->SetFrom($visitor_email, $name);
            $mail->AddReplyTo($visitor_email,$name);

            $mail->Subject  = "Message from  Contact form";
            $mail->Body     = $user_message;
            $mail->WordWrap = 50;  

            if(!$mail->Send()) {
            echo 'Message was not sent.';
            echo 'Mailer error: ' . $mail->ErrorInfo;
            } else {
            echo 'Message has been sent.';
            }
AnFi
  • 10,493
  • 3
  • 23
  • 47
andy
  • 1,947
  • 5
  • 27
  • 46

15 Answers15

87

Remove or comment out the line-

$mail->IsSMTP();

And it will work for you.

I have checked and experimented many answers from different sites but haven't got any solution except the above solution.

dario
  • 5,149
  • 12
  • 28
  • 32
Snehasis
  • 915
  • 6
  • 10
10

You must to have installed php_openssl.dll, if you use wampserver it's pretty easy, search and apply the extension for PHP.

In the example change this:

    //Set the hostname of the mail server
    $mail->Host = 'smtp.gmail.com';

    //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission 465 ssl
    $mail->Port = 465;

    //Set the encryption system to use - ssl (deprecated) or tls
    $mail->SMTPSecure = 'ssl';

and then you recived an email from gmail talking about to enable the option to Less Safe Access Applications here https://www.google.com/settings/security/lesssecureapps

I recommend you change the password and encrypt it constantly

El David
  • 616
  • 8
  • 17
  • Thank you so much! Your answer was the most helpful, less confusing and straight to the point! I was pulling my hair out for hours!. What worked for me was selecting the "turn on" option here https://www.google.com/settings/u/1/security/lesssecureapps. I am using a Mac and Xampp. Thanks a million – Tim Anishere Jun 12 '16 at 12:55
4

You've got no SMTPSecure setting to define the type of authentication being used, and you're running the Host setting with the unnecessary 'ssl://' (PS -- ssl is over port 465, if you need to run it over ssl instead, see the accepted answer here. Here's the lines to add/change:

+ $mail->SMTPSecure = 'tls';

- $mail->Host = "ssl://smtp.gmail.com";
+ $mail->Host = "smtp.gmail.com";
Community
  • 1
  • 1
Dmitri DB
  • 317
  • 3
  • 15
  • Still not working.. The error generated is this " ERROR: Failed to connect to server: Connection timed out (110)SMTP Connect() failed. Message was not sent.Mailer error: SMTP Connect() failed." – andy Sep 03 '13 at 09:27
  • Try editing your original post with the code you've tried changing until this point so we may have a perfectly clear idea as to what it looks like right now? Still seems like something that could be fixed in there... – Dmitri DB Sep 03 '13 at 18:00
  • I had a similar problem. You need to specify SMTPSecure setting. If you're using tls you need to use 587 port. If you are using ssl the combination is 465. And yes, get rid of the ssl:// in front of smtp.gmail.com – chap Nov 20 '13 at 13:30
  • 1
    Setting `Host` to `tls://smtp.gmail.com` achieves exactly the same thing as setting `Host` to `smtp.gmail.com` and SMTPSecure to `tls`; it's just an alternative syntax for the same thing. You can append a port like `:587` as well to set the `Port` property. – Synchro May 17 '16 at 06:15
4

Are you running on Localhost? and have you edit the php.ini ?

If not yet, try this:
1. Open xampp->php->php.ini
2. Search for extension=php_openssl.dll
3. The initial will look like this ;extension=php_openssl.dll
4. Remove the ';' and it will look like this extension=php_openssl.dll
5. If you can't find the extension=php_openssl.dll, add this line extension=php_openssl.dll.
6. Then restart your Xampp.

Goodluck ;)

  • 1
    dude in my `php.init` only I find `extension=openssl` but not `extension=php_openssl.dll` – Goyo May 13 '19 at 06:57
3

I know its been a while since this question but I had the exact problem and solved it by disabling SMTP_BLOCK on csf.conf (we use CSF for a firewall).

To disable just edit csf.conf and disable SMTP_BLOCK like so:

###############################################################################
# SECTION:SMTP Settings
###############################################################################
# Block outgoing SMTP except for root, exim and mailman (forces scripts/users
# to use the exim/sendmail binary instead of sockets access). This replaces the
# protection as WHM > Tweak Settings > SMTP Tweaks
#
# This option uses the iptables ipt_owner/xt_owner module and must be loaded
# for it to work. It may not be available on some VPS platforms
#
# Note: Run /etc/csf/csftest.pl to check whether this option will function on
# this server
# SMTP_BLOCK = "1" --> this will cause phpmailer Connection timed out (110)
SMTP_BLOCK = "0"
Goldbug
  • 605
  • 6
  • 8
  • Thanks for this. Turns out this was the real culprit in my cPanel install and not the switch on the "SMTP Restriction" config page in WHM. – Garrett W. Mar 11 '19 at 21:24
3

i've had this problem in tell i recive an email from google telling me that someone try to login to your account is it you and i answer yes then it start workin so if this is the case for you look in your email and allow the server

  • sorry for my bad english , okey what i said is that i was trying to send an email using phpmailer and i keep getting the same error " SMTP -> ERROR: Failed to connect to server: Connection timed out (110)... " after 1 minuts google had sent me an email inbox ( the same email that i was using in phpmailer ) and they sayed that someone is trying to access to my email from an non knowing device and the asked me if it was me and i answer yes and problem resolved , an other informations that could be helpful use a hard password like Pa$wword in your gmail – user5778000 Jul 16 '16 at 15:26
  • You can edit your original post. Your English is good but not your punctuation :-) – Supersharp Jul 16 '16 at 17:19
3

Login your Google account at myaccount.google.com/security go to "Login" and then "Security", scroll to bottom then enable the "Allow less secure apps" option.

Daniel
  • 1,229
  • 14
  • 24
Hieu.Gi
  • 77
  • 6
2

Here is a list of this you should look into when dealing with PHPMailer:

  1. Enable openSSL by un-commenting extension=php_openssl.dll in your PHP.ini
  2. Use $mail->SMTPSecure = 'tls'; and $mail->Port = 587;
  3. Enable debugging for if you are going wrong somewhere else like incorrect username and password etc.
user2009750
  • 3,169
  • 5
  • 35
  • 58
1

You are doing all well. Just you have to check different SMTP ports like 465 and others that works on your system. Another thing to keep in mind to allow access to the less secure apps by google account otherwise it throws the same error.
I have gone through it for a whole day and the only thing I am doing wrong is the port no., I just changed the port no. and it works.

Deepak Kumar
  • 677
  • 1
  • 8
  • 22
1

Mailjet

SMTP SETTINGS

Port: 25 or 587 (some providers block port 25)

I work by changing the port after deploying the app to the server.

  • In Debug it worked for me: $mail->Port = 25;
  • In Release it worked for me: $mail->Port = 587;

GL

Braian Coronel
  • 22,105
  • 4
  • 57
  • 62
0

To get it working, I had to go to myaccount.google.com -> "connected apps & sites", and turn "Allow less secure apps" to "ON" (near the bottom of the page).

0

If it works on your localhost but not on your web host:

Some hosting sites block certain outbound SMTP ports. Commenting out the line $mail->IsSMTP(); as noted in the accepted answer may make it work, but it is simply disabling your SMTP configuration, and using the hosting site's email config.

If you are using GoDaddy, there is no way to send mail using a different SMTP. I was using SiteGround, and found that they were allowing SMTP access from ports 25 and 465 only, with an SSL encryption type, so I would look up documentation for your host and go from there.

Stephanie
  • 133
  • 2
  • 7
0
        <?php
    require 'PHPMailer/PHPMailerAutoload.php';
    
    $mail = new PHPMailer();
    
    $mail->SMTPDebug = 0;                               // Enable verbose debug output
    
    
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->IsSMTP();
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'mail@gmail.com';                 // SMTP username
    $mail->Password = 'your pass';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to
    $mail->setFrom('mail@gmail.com');
    $mail->addAddress('mail@gmail.com');               // Name is optional
    
    
    $mail->isHTML(true);                                  // Set email format to HTML
    
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $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';
    }
    
  ?>

THIS WORK FOR ME JUST WHEN YOU WANT TO TEST DON'T USE IDE FOR TESTING THAT BECAUSE PROBABLY NOT WORK IF YOU IN LOCALHOST USE localhost/yourfile.php

MAX
  • 137
  • 3
-2

the solution is configure the gmail preferences, access to no secure application

CSchulz
  • 10,882
  • 11
  • 60
  • 114
-3

Recently Google has lauched something called App Password. By creating an app-password for my mailer instance solved the issue for me.

https://support.google.com/accounts/answer/185833?p=InvalidSecondFactor&visit_id=1-636228492770322608-2743677043&rd=1