Skip to content
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

Closed
ricuss opened this issue Aug 11, 2022 · 12 comments
Closed

Empty message list when using Gmail with POP #255

ricuss opened this issue Aug 11, 2022 · 12 comments
Labels
bug Something isn't working Gmail Related to Google mail / GMAIL validated

Comments

@ricuss
Copy link
Contributor

ricuss commented Aug 11, 2022

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

image

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?

image

I then run the following query on the inbox folder:

 /** @var Folder $folder */
$folder = $client->getFolderByPath($folderPath);

$message = $folder->query()
    ->setFetchBody(true)
    ->fetchOrderDesc()
    ->get();

Expected behavior
The expected behaviour is to get a list of messages, but instead I get an empty message collection:

image

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:

image

The mailbox also definitely has emails in the inbox:
image

We've been able to reproduce this on other google accounts as well.

Please let me know if you need any more information

@Webklex
Copy link
Owner

Webklex commented Aug 11, 2022

Hi @ricuss ,
many thanks for the detailed report! Unfortunately I don't have a gmail test account atm (Google keeps deleting it).
You can enable the debug mode: https://github.com/Webklex/php-imap/blob/master/src/config/imap.php#L152

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 LegacyProtocol::folder() directly, perhaps this gives some additional insight:

public function folders(string $reference = '', string $folder = '*'): array {
$result = [];
$items = \imap_getmailboxes($this->stream, $this->getAddress(), $reference.$folder);
if(is_array($items)){
foreach ($items as $item) {
$name = $this->decodeFolderName($item->name);
$result[$name] = ['delimiter' => $item->delimiter, 'flags' => []];
}
}else{
throw new RuntimeException(\imap_last_error());
}
return $result;
}

/** @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,

@Webklex Webklex added bug Something isn't working validating labels Aug 11, 2022
@ricuss
Copy link
Contributor Author

ricuss commented Aug 12, 2022

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:

image

When I dd the response of $items in the folders function directly, so basically update vendor file to:

 public function folders($reference = '', $folder = '*') {
        $result = [];

        $items = \imap_getmailboxes($this->stream, $this->getAddress(), $reference.$folder);

        dd($items);
       ...
}

We get the below:

image

When I change the configs back to imap I get the following folders:

image

I've enabled the debug but not sure where this prints the debug info to?

@Webklex
Copy link
Owner

Webklex commented Aug 12, 2022

Hi @ricuss ,
sry my bad - you didn't have to edit the vendors file, you can access the connection via this snipped:

/** @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 pop3. This isn't possible. The legacy protocol utilizes the native php-imap module, which doesn't allow debugging. Sorry for that.

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:
https://github.com/Webklex/laravel-imap/blob/1.6.2/src/IMAP/Client.php#L331-L344

It used to have an optional parameter $prefix_address which would generate a valid pop3 path:

// {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.

@ricuss
Copy link
Contributor Author

ricuss commented Aug 12, 2022

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?

@Webklex
Copy link
Owner

Webklex commented Aug 12, 2022

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();

@ricuss
Copy link
Contributor Author

ricuss commented Aug 12, 2022

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

image

Completely removing the logout code fails on imap_reopen:

image

Adding the delimiter to the folder has the same imap_close and imap_reopen errors.

Am I doing something wrong here?

@Webklex
Copy link
Owner

Webklex commented Aug 12, 2022

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:
The $client->connect(); part has to be executed. Otherwise the stream / connection / resource isn't available.

@ricuss
Copy link
Contributor Author

ricuss commented Aug 12, 2022

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)
[stacktrace]
#0 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php(150): imap_close(Resource id #10, 32768)
#1 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php(47): Webklex\PHPIMAP\Connection\Protocols\LegacyProtocol->logout()
#2 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Route.php(238): Webklex\PHPIMAP\Connection\Protocols\LegacyProtocol->__destruct()
#3 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Route.php(208): Illuminate\Routing\Route->runCallable()
#4 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run()
#5 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#6 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#7 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#8 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#9 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#12 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#13 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest(Object(Illuminate\Http\Request), Object(Illuminate\Session\Store), Object(Closure))
#14 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#21 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#22 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#23 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#24 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#25 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#26 /Users/rswanepoel/dev/efficiencyhub/nova/src/Http/Middleware/ServeNova.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Laravel\Nova\Http\Middleware\ServeNova->handle(Object(Illuminate\Http\Request), Object(Closure))
#28 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#29 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#36 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#37 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#38 /Users/rswanepoel/dev/efficiencyhub/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#39 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 /Users/rswanepoel/dev/efficiencyhub/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#44 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#45 /Users/rswanepoel/dev/efficiencyhub/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#46 /Users/rswanepoel/.composer/vendor/laravel/valet/server.php(234): require('/Users/rswanepo...')
#47 {main}

[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)
[stacktrace]
#0 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Connection/Protocols/LegacyProtocol.php(150): imap_close(Resource id #10, 32768)
#1 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Client.php(402): Webklex\PHPIMAP\Connection\Protocols\LegacyProtocol->logout()
#2 /Users/rswanepoel/dev/efficiencyhub/vendor/webklex/php-imap/src/Client.php(187): Webklex\PHPIMAP\Client->disconnect()
#3 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Route.php(238): Webklex\PHPIMAP\Client->__destruct()
#4 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Route.php(208): Illuminate\Routing\Route->runCallable()
#5 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run()
#6 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#7 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#8 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#9 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#10 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#11 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest(Object(Illuminate\Http\Request), Object(Illuminate\Session\Store), Object(Closure))
#15 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#16 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#17 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#18 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#19 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#22 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#23 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#24 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#25 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#26 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#27 /Users/rswanepoel/dev/efficiencyhub/nova/src/Http/Middleware/ServeNova.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Laravel\Nova\Http\Middleware\ServeNova->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 /Users/rswanepoel/dev/efficiencyhub/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#40 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#41 /Users/rswanepoel/dev/efficiencyhub/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#43 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#44 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#45 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#46 /Users/rswanepoel/dev/efficiencyhub/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#47 /Users/rswanepoel/.composer/vendor/laravel/valet/server.php(234): require('/Users/rswanepo...')
#48 {main}

[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()
#5 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Route.php(238): Illuminate\Routing\RouteFileRegistrar->{closure}()
#6 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Route.php(208): Illuminate\Routing\Route->runCallable()
#7 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run()
#8 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#9 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#10 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#11 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest(Object(Illuminate\Http\Request), Object(Illuminate\Session\Store), Object(Closure))
#17 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#18 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#19 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#24 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#25 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#26 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#27 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#28 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#29 /Users/rswanepoel/dev/efficiencyhub/nova/src/Http/Middleware/ServeNova.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Laravel\Nova\Http\Middleware\ServeNova->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#36 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#40 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#41 /Users/rswanepoel/dev/efficiencyhub/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#43 /Users/rswanepoel/dev/efficiencyhub/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#44 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#45 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#46 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#47 /Users/rswanepoel/dev/efficiencyhub/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#48 /Users/rswanepoel/dev/efficiencyhub/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#49 /Users/rswanepoel/.composer/vendor/laravel/valet/server.php(234): require('/Users/rswanepo...')
#50 {main}
"}

I hope this helps

@Webklex
Copy link
Owner

Webklex commented Aug 12, 2022

Thanks :)

So everything works up until $folder->query() and therefor LegacyProtocol::selectFolder() gets called:

[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 LegacyProtocol::selectFolder() fails, we are stuck.

/** @var \Webklex\PHPIMAP\Client $client */
$client->connect();
$con = $client->getConnection();
$con->openFolder($path); 

Im a bit confused about the Couldn't re-open stream part - a resource seems to be present iimap_reopen(Resource id #10, '{pop.gmail.com:...', 2, 3). This would leave the $path variable as the potential problem.

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,

@Webklex
Copy link
Owner

Webklex commented Aug 12, 2022

Here we have a partial solution: #234
However its missing the pop3 protocol check and won't fix the second selectFolder problem.

@ricuss
Copy link
Contributor Author

ricuss commented Aug 12, 2022

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 :)

@ricuss
Copy link
Contributor Author

ricuss commented Aug 19, 2022

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!

@Webklex Webklex added the Gmail Related to Google mail / GMAIL label Aug 20, 2022
@Webklex Webklex closed this as completed Apr 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Gmail Related to Google mail / GMAIL validated
Projects
None yet
Development

No branches or pull requests

2 participants