connect gmail through php imap? local issuer certificate error [duplicate]
Asked Answered
B

2

9

I need to connect to a Gmail account via IMAP using PHP. I have some working code, but when attempting to establish a connection, I receive the following error:

Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/ssl}[Gmail]/All Mail in /home/demoosiz/public_html/goqlue/email.php on line 31
Cannot connect to Gmail: Certificate failure for imap.gmail.com: unable to get local issuer certificate: /C=US/O=Google Inc/CN=Google Internet Authority

my code is below

<?php
    /* connect to gmail */
    $hostname = '{imap.gmail.com:993/ssl}[Gmail]/All Mail';
    $username = 'hidden';
    $password = 'hidden';

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

    /* grab emails */
    $emails = imap_search($inbox,'ALL');

    /* if emails are returned, cycle through each... */
    if($emails) {

      /* begin output var */
      $output = '';

      /* put the newest emails on top */
      rsort($emails);

      /* for every email... */
      foreach($emails as $email_number) {

        /* get information specific to this email */
        $overview = imap_fetch_overview($inbox,$email_number,0);
        $message = imap_fetchbody($inbox,$email_number,2);

        /* output the email header information */
        $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">';
        $output.= '<span class="subject">'.$overview[0]->subject.'</span> ';
        $output.= '<span class="from">'.$overview[0]->from.'</span>';
        $output.= '<span class="date">on '.$overview[0]->date.'</span>';
        $output.= '</div>';

        /* output the email body */
        $output.= '<div class="body">'.$message.'</div>';
      }

      echo $output;
    } 

    /* close the connection */
    imap_close($inbox);
    ?>
Bromley answered 6/3, 2013 at 8:35 Comment(6)
are you testing in XAMPP ?Newson
Did you just post the login and password to your mail account?Crat
Yes he did. Already have submitted an edit to remove itNewson
@jothikannan: You need to change your gmail password because the history of the question is still publicly available.Exigible
oops, thanks , i forget to edit my user name and password in the code , anyway thank you so much for intimationBromley
This question has been marked as a duplicate of https://mcmap.net/q/612269/-certificate-error-using-imap-in-php/2294879, however it is clearly not a duplicate. In this question the problem is that the CA certificate is not being found. In the linked question the problem is that the server certificate is failing to verify because the hostname in the certificate does not match that to which the client has connected. Whoever has power to do so, please unlink these questions to avoid confusion.Proofread
N
13

This seems to be a certificate issue.

I don't tell you what the certificate issue is nor how to solve it.

However, you can leave your gmail account open to attacks by ignoring that issue disabling the certificate validation:

$hostname = '{imap.gmail.com:993/ssl/novalidate-cert}[Gmail]/All Mail';
Newson answered 6/3, 2013 at 8:43 Comment(11)
You don't solve certificate issues by ignoring certificates. That is very bad practice. And barely equally like providing passwords plaintext.Exigible
I Agree, but with the limited information of the OP, this usually happens in XAMMP. If he tries this and this works, he can then go on to further deal with it, like loading certificates from a file.Newson
I edited your answer, please check if that better reflects what you want to suggest. I tried to use language that is easy to understand but you might find it offendling.Exigible
to be honest, you are being a bit patronising but I like your approach so lets leave this as is. :)Newson
now i got "Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/ssl/novalidate-cert}[Gmail]/All Mail in /home/demoosiz/public_html/goqlue/email.php on line 31 Cannot connect to Gmail: Too many login failures" this errorBromley
1) Check that you can login to gmail normally (through your web browser). 2) Check that you are using the correct password , and that you have updated it in your code. (I'm assuming that you hopefully have changed it since you made it publicly availableNewson
and now i got this error "Fatal error: Out of memory (allocated 188481536) (tried to allocate 165358938 bytes) in /home/demoosiz/public_html/goqlue/email.php on line 60"Bromley
You are fetching everything in your gmail account, hence the OOM. Try limiting. i.e. instead of "All Mail" use "Sent" or "INBOX" and test againNewson
Now it showing empty pageBromley
let us continue this discussion in chatBromley
what if we were connecting to MSExchange Server email which has already disabled ssl and enabled IMAP, but still getting the error?Seaport
E
4

Cannot connect to Gmail: Certificate failure for imap.gmail.com: unable to get local issuer certificate: /C=US/O=Google Inc/CN=Google Internet Authority

The system you execute the code on is missing that certificate. There is not much more that can be said about this by the information you provided with your question. Consult the system documentation of the operating system you have how to install certificates and how to aquire the needed certificate.

See as well:

Exigible answered 6/3, 2013 at 8:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.