-
-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Empty message list when using Gmail with POP #255
Comments
Hi @ricuss , This might provide some clues. Besides this the legacy mode isn't as powerful as imap (you are missing several features) but I'm sure you are already aware of this. You could also try to call php-imap/src/Connection/Protocols/LegacyProtocol.php Lines 326 to 340 in 6e76b35
/** @var \Webklex\PHPIMAP\Client $client */
$con = $client->getConnection();
$con->enableDebug();
dd($con->folders("", "*")); The same is true for messages, but lets start with the folder "feature" first :) Best regards & happy coding, |
Hi @Webklex , thanks for getting back so quickly. So I've done what you suggested making use of the LegacyProtocol@folders. I added a dd in there to be sure that is what we are using, with the following output: When I dd the response of public function folders($reference = '', $folder = '*') {
$result = [];
$items = \imap_getmailboxes($this->stream, $this->getAddress(), $reference.$folder);
dd($items);
...
} We get the below: When I change the configs back to imap I get the following folders: I've enabled the debug but not sure where this prints the debug info to? |
Hi @ricuss , /** @var \Webklex\PHPIMAP\Client $client */
$con = $client->getConnection();
$con->enableDebug();
dd($con->folders("", "*")); Anyway I suggested to enable the debug mode, in order to debug If we believe this SO comment (https://stackoverflow.com/a/5578486/2285829) we are on the hunt for an impossible task. I've looked through the old version to see how the method used to look: It used to have an optional parameter // {mail.server.com:110/pop3}/INBOX
$this->getAddress().$folder_name ..currently that's not the case. You might be able to fetch a specific folder: /** @var \Webklex\PHPIMAP\Client $client */
$folder = new \Webklex\PHPIMAP\Folder($client, "{mail.server.com:110/pop3}/INBOX", $delimiter = "/", $flags = []); I hope this helps. |
Hi @Webklex I did run that snippet as well, just added the vendor dd to be 100% sure we were using that function. Thanks for the SO link, I hate pop3 and don't know why some clients INSIST on using it, I believe it's due to them just not knowing better but we are trying to educate them. If we look past the folder identification, the primary issue is still that no emails are returned when listing the emails in the one folder it finds. Do you think this is somehow related? We should still be able to get the inbox messages at least and not an empty list? |
Even if you initialize the folder manually? /** @var \Webklex\PHPIMAP\Client $client */
$path = "{pop.gmail.com:995/pop3/novalidate-cert/ssl}INBOX";
$folder = new \Webklex\PHPIMAP\Folder($client, $path, $delimiter = "/", $flags = []);
$message = $folder->query()
->setFetchBody(true)
->fetchOrderDesc()
->get(); Update: another thought, if the above fails: /** @var \Webklex\PHPIMAP\Client $client */
$path = "{pop.gmail.com:995/pop3/novalidate-cert/ssl}INBOX";
$folder = new \Webklex\PHPIMAP\Folder($client, $path, $delimiter = "/", $flags = []);
$folder->delimiter = ""; // Overwrite the delimiter to prevent path splitting
$message = $folder->query()
->setFetchBody(true)
->fetchOrderDesc()
->get(); |
There seems to be an issue with the stream except if I'm doing something wrong, currently I have: $cm = new \Webklex\PHPIMAP\ClientManager(config('imap'));
$data = [
'username' => 'themail@address.co.za',
'password' => 'secretpassword',
'host' => 'pop.gmail.com',
'port' => 995,
'encryption' => 'ssl',
'protocol' => 'pop3',
'validate_cert' => false,
];
/** @var \Webklex\PHPIMAP\Client $client */
$client = $cm->make($data);
// $client->connect(); // With this it still fails
$path = "{pop.gmail.com:995/pop3/novalidate-cert/ssl}INBOX";
$folder = new \Webklex\PHPIMAP\Folder($client, $path, $delimiter = "/", $flags = []);
$message = $folder->query()
->setFetchBody(true)
->fetchOrderDesc()
->get();
dd($message); The dd never reaches as it fails on logout, invalid stream Completely removing the logout code fails on imap_reopen: Adding the delimiter to the folder has the same imap_close and imap_reopen errors. Am I doing something wrong here? |
Can you share the entire call stack from the first screenshot? It looks like you've just caught the __destruct call - something has happened before, which caused the exception. Would be interesting to see what lead up to it. Update: |
Sure, so with the following: $cm = new \Webklex\PHPIMAP\ClientManager(config('imap'));
$data = [
'username' => 'xxxxx',
'password' => 'xxxxx',
'host' => 'pop.gmail.com',
'port' => 995,
'encryption' => 'ssl',
'protocol' => 'pop3',
'validate_cert' => false,
];
/** @var \Webklex\PHPIMAP\Client $client */
$client = $cm->make($data);
$client->connect();
$path = "{pop.gmail.com:995/pop3/novalidate-cert/ssl}INBOX";
$folder = new \Webklex\PHPIMAP\Folder($client, $path, $delimiter = "/", $flags = []);
$folder->delimiter = "";
$message = $folder->query()
->setFetchBody(true)
->fetchOrderDesc()
->get();
dd($message); Stack Trace[2022-08-12 12:42:43] local.ERROR: imap_close(): supplied resource is not a valid imap resource {"userId":1,"exception":"[object] (TypeError(code: 0): imap_close(): supplied resource is not a valid imap resource at /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php:150) [previous exception] [object] (TypeError(code: 0): imap_close(): supplied resource is not a valid imap resource at /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php:150) [previous exception] [object] (ErrorException(code: 0): imap_reopen(): Couldn't re-open stream at /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php:184) I hope this helps |
Thanks :) So everything works up until [previous exception] [object] (ErrorException(code: 0): imap_reopen(): Couldn't re-open stream at /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php:184)
[stacktrace]
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'imap_reopen(): ...', '/Users/rswanepo...', 184)
#1 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php(184): imap_reopen(Resource id #10, '{pop.gmail.com:...', 2, 3)
#2 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Client.php(513): Webklex\PHPIMAP\Connection\Protocols\LegacyProtocol->selectFolder('{pop.gmail.com:...')
#3 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Folder.php(142): Webklex\PHPIMAP\Client->openFolder('{pop.gmail.com:...')
#4 /Users/rswanepoel/dev/efficiencyhub/routes/web.php(51): Webklex\PHPIMAP\Folder->query() As long as /** @var \Webklex\PHPIMAP\Client $client */
$client->connect();
$con = $client->getConnection();
$con->openFolder($path); Im a bit confused about the Unfortunately I'm a bit lost atm.. I have to think about it some more. If you have any additional discoveries or ideas, please share them with me. Best regards & a happy weekend, |
Here we have a partial solution: #234 |
Thanks a lot for the effort looking into this. I'll definitely share whatever I find, hopefully something comes to mind from your side over the weekend too, it's a really weird one. Enjoy your weekend :) |
Hi @Webklex I've not been able to get around this one, so we've managed to convince the client to get their pop clients on imap, or just use a forwarded to an imap enabled mailbox as a workaround. It's a small percentage of the clients that are on pop and being stubborn Thanks for the effort looking into this! |
Hi @Webklex , thanks for the work on this package. We are FINALLY upgrading from the old v1 laravel wrapper to the latest core php-imap package (The wrapper wasn't really needed for our use case)
The upgrade has been good so far, and some issues we were experiencing has been resolved in the newer versions of the package which is great!
There is just one last issue we are facing with POP accounts, unfortunately some people insist on POP even though we try to convince them to use imap :/
Describe the bug
No messages returned when using POP3 to connect to Gmail.
Code to Reproduce
Using the default gmail pop settings:
Port: 995
Protocol: pop3
Encryption: ssl
The connection is successful, and I can get a listing of folders. A side note on this, only the inbox folders gets returned when getting a listing while connected via pop, if connected via imap all folders are returned. Is this expected?
I then run the following query on the inbox folder:
Expected behavior
The expected behaviour is to get a list of messages, but instead I get an empty message collection:
Additional context
The retrieval of mails works perfectly when connecting via imap, but when connecting via POP3 no messages are returned.
I have confirmed that pop is enabled on the gmail account:
The mailbox also definitely has emails in the inbox:
We've been able to reproduce this on other google accounts as well.
Please let me know if you need any more information
The text was updated successfully, but these errors were encountered: