Skip to content

starttls option does not work #60

@pashgunn

Description

@pashgunn

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’.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions