13
votes

There are lots of people having similar issues but no one is answering their questions. I have IMAP enabled in PHP, Using all the correct information. I don't see where I'm going wrong.

Here's my code:

$hostname = '{imap.gmail.com:995/imap/ssl/novalidate-cert}'; 
$username = '[email protected]'; $password = 'password'; 
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

print_r(imap_errors());

Not returning any errors other than:

Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:995/imap/ssl/novalidate-cert} in /home/a8066360/public_html/test/imap.php on line 6

Cannot connect to Gmail: Can't connect to gmail-imap.l.google.com, 995: Connection timed out

I've noticed that if I change the single quotes to `

shell_exec() has been disabled for security reasons...

Please help!!!

7
The last part is quite a non-sequitur, no? ` and ' are two very different things. - deceze♦
@deceze - I think they are, for strings only ' (single quote) and " (double quote) are allowed. - uınbɐɥs
i'm brand new to php, but i saw someone else using the tacks in the same exact way in a tutorial i was folowing. - cream
I have a cron job that accesses my gmail acct once every 5 minutes to pull emails. I get this error about once every 3 days. In my case, seems like an issue on gmail's end - billynoah

7 Answers

13
votes

You need port 993, the SSL IMAP port.

Port 995 is the SSL POP3 port.

6
votes

I think Gmail's IMAP can only be accessed on port 993.

$hostname = "{imap.gmail.com:993/imap/ssl/novalidate-cert}";

3
votes

I had the same error and found a different solution. I have added debug info into host:

"{imap.gmail.com:993/debug/imap/ssl/novalidate-cert}INBOX"; 

When I read php error log, I found

Unknown: [ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure) (errflg=1) in Unknown on line 0

Open link, and follow instructions. Search for

Your app might not support the latest security standards. Try changing a few settings to allow less secure apps access to your account.

Click on link and enable less secure app access.

Then it works for me.

1
votes

I had the same issue and I fixed it by unlocking the Google captcha.

Go to the following URL while signed in to the Google account : https://accounts.google.com/DisplayUnlockCaptcha

And click on the button.

Of course, you already had activated the access for less secure apps in the Security tab of your Google account settings ;).

It should work now !

1
votes

You have to enable the given option from Gmail account get connected. https://myaccount.google.com/lesssecureapps

0
votes

You can setup 2 step authentication and then assign an APP password to use in your requests (just replace your password with the one provided for the app, your normal password doesn't change.).

This will help your script run from any host without google blocking it (due to a change in login location).

0
votes

You can try the following code by giving a notls argument and connecting the server like follows, if SSL is not applied.

$hostname = '{imap.YOUR_DOMAIN.com:143/imap/notls}INBOX'; 
$username = 'YOUR_USERNAME';
$password = 'YOUR_PASSWORD';

$inbox = imap_open($hostname, $username, $password) or die('Cannot connect to Gmail: ' . imap_last_error());

If it will not throw any error, this means that you are succesfully connected to server then. I hope this helps.