-
-
Notifications
You must be signed in to change notification settings - Fork 22
Description
Environment
PHP version: 8.1
ImapEngine version: 1.11
IMAP server: Rambler
No debug logs since it is php errors.
I need to connect to an imap server using starttls. I am following the instructions given here https://imapengine.com/docs/usage/configuration. Here is my code:
use DirectoryTree\ImapEngine\Mailbox;
$config = [
'port' => 143,
'host' => 'imap.rambler.ru',
'timeout' => 30,
'debug' => true,
'username' => $username,
'password' => $password,
'encryption' => 'starttls',
'validate_cert' => false,
];
$mailbox = new Mailbox($config);
$mailbox->connect();
And I'm getting this error:
PHP Fatal error: Uncaught UnhandledMatchError: Unhandled match case 'starttls' in /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php:125
Stack trace:
#0 /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php(103): DirectoryTree\ImapEngine\Connection\ImapConnection->getDefaultSocketOptions('starttls', Array, false)
#1 /var/www/html/vendor/directorytree/imapengine/src/Mailbox.php(141): DirectoryTree\ImapEngine\Connection\ImapConnection->connect('imap.rambler.ru', 143, Array)
#2 /var/www/html/test.php(22): DirectoryTree\ImapEngine\Mailbox->connect()
#3 {main}
thrown in /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php on line 125
Also tried using ‘encryption’ => ‘tcp’ (tcp is mentioned in the library source code) and just an empty string ‘’, I get the following error:
2025-04-23 14:40:02: >> TAG1 LOGIN "my_username" "my_password"
2025-04-23 14:40:02: << TAG1 BAD invalid command
PHP Fatal error: Uncaught DirectoryTree\ImapEngine\Exceptions\ImapCommandException: IMAP command "TAG1 LOGIN [redacted] [redacted]" failed. Response: "TAG1 BAD invalid command" in /var/www/html/vendor/directorytree/imapengine/src/Exceptions/ImapCommandException.php:25
Stack trace:
#0 /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php(177): DirectoryTree\ImapEngine\Exceptions\ImapCommandException::make(Object(DirectoryTree\ImapEngine\Connection\ImapCommand), Object(DirectoryTree\ImapEngine\Connection\Responses\TaggedResponse))
#1 /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php(706): DirectoryTree\ImapEngine\Connection\ImapConnection->DirectoryTree\ImapEngine\Connection\{closure}(Object(DirectoryTree\ImapEngine\Connection\Responses\TaggedResponse))
#2 /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php(687): DirectoryTree\ImapEngine\Connection\ImapConnection->assertNextResponse(Object(Closure), Object(Closure), Object(Closure))
#3 /var/www/html/vendor/directorytree/imapengine/src/Connection/ImapConnection.php(178): DirectoryTree\ImapEngine\Connection\ImapConnection->assertTaggedResponse('TAG1', Object(Closure))
#4 /var/www/html/vendor/directorytree/imapengine/src/Mailbox.php(160): DirectoryTree\ImapEngine\Connection\ImapConnection->login('my_username', 'my_password')
#5 /var/www/html/vendor/directorytree/imapengine/src/Mailbox.php(144): DirectoryTree\ImapEngine\Mailbox->authenticate()
#6 /var/www/html/test.php(22): DirectoryTree\ImapEngine\Mailbox->connect()
#7 {main}
thrown in /var/www/html/vendor/directorytree/imapengine/src/Exceptions/ImapCommandException.php on line 25
2025-04-23 14:40:02: >> TAG2 LOGOUT
Also, I think I found the cause of the error - in this method \DirectoryTree\ImapEngine\Connection\ImapConnection::connect the parameter $transport should be equal to ‘starttls’ or ‘ssl’, according to the documentation. However, already in \DirectoryTree\ImapEngine\Connection\ImapConnection\ImapConnection::getDefaultSocketOptions it is assumed that $transport is equal to ‘ssl’, ‘tls’ or ‘tcp’.