Skip to content

[2.x] smtp errors in Flarum 2 beta 4 #4301

@PrimateCoder

Description

@PrimateCoder

Current Behavior

Creating this issue to track mail issues reported in this thread:
https://discuss.flarum.org/d/38464-does-email-delivery-work-on-beta-4

Reportedly SMTP was working fine on beta 3. In beta 4, these separate errors were noted:

2025-11-30 14:51:44 SMTP syntax error in "" H=mail.hide.ru [ip] unrecognized command

and:

[2025-11-30T20:17:40.559578+00:00] flarum.ERROR: Symfony\Component\Mailer\Exception\TransportException: Connection could not be established with host "ssl://smtp.gmail.com:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A00010B:SSL routines::wrong version number in /var/www/html/vendor/symfony/mailer/Transport/Smtp/Stream/SocketStream.php:154
Stack trace:
#0 [internal function]: Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream->Symfony\Component\Mailer\Transport\Smtp\Stream\{closure}(2, 'stream_socket_c...', '/var/www/html/v...', 157)
#1 /var/www/html/vendor/symfony/mailer/Transport/Smtp/Stream/SocketStream.php(157): stream_socket_client('ssl://smtp.gmai...', 0, '', 60.0, 4, Resource id #55)
#2 /var/www/html/vendor/symfony/mailer/Transport/Smtp/SmtpTransport.php(268): Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream->initialize()
#3 /var/www/html/vendor/symfony/mailer/Transport/Smtp/SmtpTransport.php(200): Symfony\Component\Mailer\Transport\Smtp\SmtpTransport->start()
#4 /var/www/html/vendor/symfony/mailer/Transport/AbstractTransport.php(69): Symfony\Component\Mailer\Transport\Smtp\SmtpTransport->doSend(Object(Symfony\Component\Mailer\SentMessage))
#5 /var/www/html/vendor/symfony/mailer/Transport/Smtp/SmtpTransport.php(138): Symfony\Component\Mailer\Transport\AbstractTransport->send(Object(Symfony\Component\Mime\Email), Object(Symfony\Component\Mailer\DelayedEnvelope))
#6 /var/www/html/vendor/illuminate/mail/Mailer.php(585): Symfony\Component\Mailer\Transport\Smtp\SmtpTransport->send(Object(Symfony\Component\Mime\Email), Object(Symfony\Component\Mailer\DelayedEnvelope))
#7 /var/www/html/vendor/illuminate/mail/Mailer.php(332): Illuminate\Mail\Mailer->sendSymfonyMessage(Object(Symfony\Component\Mime\Email))
#8 /var/www/html/vendor/flarum/core/src/Mail/Mailer.php(44): Illuminate\Mail\Mailer->send('mail::html.info...', Array, Object(Closure))
#9 /var/www/html/vendor/flarum/core/src/Mail/Job/SendInformationalEmailJob.php(43): Flarum\Mail\Mailer->send(Array, Array, Object(Closure))
#10 /var/www/html/vendor/illuminate/container/BoundMethod.php(36): Flarum\Mail\Job\SendInformationalEmailJob->handle(Object(Flarum\Mail\Mailer), Object(Illuminate\View\Factory))
#11 /var/www/html/vendor/illuminate/container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#12 /var/www/html/vendor/illuminate/container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#13 /var/www/html/vendor/illuminate/container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod(Object(Flarum\Foundation\Application), Array, Object(Closure))
#14 /var/www/html/vendor/illuminate/container/Container.php(696): Illuminate\Container\BoundMethod::call(Object(Flarum\Foundation\Application), Array, Array, NULL)
#15 /var/www/html/vendor/illuminate/bus/Dispatcher.php(126): Illuminate\Container\Container->call(Array)
#16 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(170): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Flarum\Mail\Job\SendInformationalEmailJob))
#17 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Mail\Job\SendInformationalEmailJob))
#18 /var/www/html/vendor/illuminate/bus/Dispatcher.php(130): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#19 /var/www/html/vendor/illuminate/queue/CallQueuedHandler.php(126): Illuminate\Bus\Dispatcher->dispatchNow(Object(Flarum\Mail\Job\SendInformationalEmailJob), false)
#20 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(170): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(Flarum\Mail\Job\SendInformationalEmailJob))
#21 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\Mail\Job\SendInformationalEmailJob))
#22 /var/www/html/vendor/illuminate/queue/CallQueuedHandler.php(121): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#23 /var/www/html/vendor/illuminate/queue/CallQueuedHandler.php(69): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\SyncJob), Object(Flarum\Mail\Job\SendInformationalEmailJob))
#24 /var/www/html/vendor/illuminate/queue/Jobs/Job.php(102): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\SyncJob), Array)
#25 /var/www/html/vendor/illuminate/queue/SyncQueue.php(76): Illuminate\Queue\Jobs\Job->fire()
#26 /var/www/html/vendor/illuminate/queue/SyncQueue.php(56): Illuminate\Queue\SyncQueue->executeJob(Object(Flarum\Mail\Job\SendInformationalEmailJob), '', NULL)
#27 /var/www/html/vendor/flarum/core/src/User/Job/RequestPasswordResetJob.php(54): Illuminate\Queue\SyncQueue->push(Object(Flarum\Mail\Job\SendInformationalEmailJob))
#28 /var/www/html/vendor/illuminate/container/BoundMethod.php(36): Flarum\User\Job\RequestPasswordResetJob->handle(Object(Flarum\Settings\DefaultSettingsRepository), Object(Flarum\Http\UrlGenerator), Object(Flarum\Locale\Translator), Object(Flarum\User\UserRepository), Object(Illuminate\Queue\SyncQueue))
#29 /var/www/html/vendor/illuminate/container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#30 /var/www/html/vendor/illuminate/container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#31 /var/www/html/vendor/illuminate/container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod(Object(Flarum\Foundation\Application), Array, Object(Closure))
#32 /var/www/html/vendor/illuminate/container/Container.php(696): Illuminate\Container\BoundMethod::call(Object(Flarum\Foundation\Application), Array, Array, NULL)
#33 /var/www/html/vendor/illuminate/bus/Dispatcher.php(126): Illuminate\Container\Container->call(Array)
#34 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(170): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Flarum\User\Job\RequestPasswordResetJob))
#35 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\User\Job\RequestPasswordResetJob))
#36 /var/www/html/vendor/illuminate/bus/Dispatcher.php(130): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#37 /var/www/html/vendor/illuminate/queue/CallQueuedHandler.php(126): Illuminate\Bus\Dispatcher->dispatchNow(Object(Flarum\User\Job\RequestPasswordResetJob), false)
#38 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(170): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(Flarum\User\Job\RequestPasswordResetJob))
#39 /var/www/html/vendor/illuminate/pipeline/Pipeline.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Flarum\User\Job\RequestPasswordResetJob))
#40 /var/www/html/vendor/illuminate/queue/CallQueuedHandler.php(121): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#41 /var/www/html/vendor/illuminate/queue/CallQueuedHandler.php(69): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\SyncJob), Object(Flarum\User\Job\RequestPasswordResetJob))
#42 /var/www/html/vendor/illuminate/queue/Jobs/Job.php(102): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\SyncJob), Array)
#43 /var/www/html/vendor/illuminate/queue/SyncQueue.php(76): Illuminate\Queue\Jobs\Job->fire()
#44 /var/www/html/vendor/illuminate/queue/SyncQueue.php(56): Illuminate\Queue\SyncQueue->executeJob(Object(Flarum\User\Job\RequestPasswordResetJob), '', NULL)
#45 /var/www/html/vendor/flarum/core/src/Api/Controller/ForgotPasswordController.php(39): Illuminate\Queue\SyncQueue->push(Object(Flarum\User\Job\RequestPasswordResetJob))
#46 /var/www/html/vendor/flarum/core/src/Http/RouteHandlerFactory.php(37): Flarum\Api\Controller\ForgotPasswordController->handle(Object(Laminas\Diactoros\ServerRequest))
#47 /var/www/html/vendor/flarum/core/src/Http/Middleware/ExecuteRoute.php(27): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}(Object(Laminas\Diactoros\ServerRequest), Array)
#48 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ExecuteRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Closure))
#49 /var/www/html/vendor/flarum/core/src/Http/Middleware/PopulateWithActor.php(27): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#50 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\PopulateWithActor->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#51 /var/www/html/vendor/flarum/core/src/Api/Middleware/ThrottleApi.php(31): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#52 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Api\Middleware\ThrottleApi->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#53 /var/www/html/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(40): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#54 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\CheckCsrfToken->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#55 /var/www/html/vendor/flarum/core/src/Http/Middleware/CheckForMaintenanceMode.php(37): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#56 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\CheckForMaintenanceMode->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#57 /var/www/html/vendor/flarum/core/src/Http/Middleware/ResolveRoute.php(54): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#58 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ResolveRoute->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#59 /var/www/html/vendor/flarum/core/src/Http/Middleware/SetLocale.php(43): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#60 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\SetLocale->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#61 /var/www/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(58): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#62 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\AuthenticateWithHeader->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#63 /var/www/html/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(32): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#64 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\AuthenticateWithSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#65 /var/www/html/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(55): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#66 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\RememberFromCookie->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#67 /var/www/html/vendor/flarum/core/src/Http/Middleware/StartSession.php(44): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#68 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\StartSession->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#69 /var/www/html/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#70 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Api\Middleware\FakeHttpMethods->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#71 /var/www/html/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#72 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ParseJsonBody->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#73 /var/www/html/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(43): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#74 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\HandleErrors->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#75 /var/www/html/vendor/flarum/core/src/Http/Middleware/InjectActorReference.php(25): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#76 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\InjectActorReference->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#77 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#78 /var/www/html/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#79 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Middlewares\RequestHandler->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#80 /var/www/html/vendor/middlewares/base-path-router/src/BasePathRouter.php(97): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#81 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Middlewares\BasePathRouter->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#82 /var/www/html/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(36): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#83 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\OriginalMessages->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#84 /var/www/html/vendor/middlewares/base-path/src/BasePath.php(73): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#85 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Middlewares\BasePath->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#86 /var/www/html/vendor/flarum/core/src/Http/Middleware/ProcessIp.php(24): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#87 /var/www/html/vendor/laminas/laminas-stratigility/src/Next.php(52): Flarum\Http\Middleware\ProcessIp->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\Next))
#88 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle(Object(Laminas\Diactoros\ServerRequest))
#89 /var/www/html/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(66): Laminas\Stratigility\MiddlewarePipe->process(Object(Laminas\Diactoros\ServerRequest), Object(Laminas\Stratigility\EmptyPipelineHandler))
#90 /var/www/html/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(73): Laminas\Stratigility\MiddlewarePipe->handle(Object(Laminas\Diactoros\ServerRequest))
#91 /var/www/html/vendor/flarum/core/src/Http/Server.php(44): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#92 /var/www/html/public/index.php(26): Flarum\Http\Server->listen()
#93 {main}  

Steps to Reproduce

  1. Configure SMTP email in the admin console, clone an existing Flarum 1 installation.
  2. Start the reset password flow and get an error.
  3. Go to the logs.

Expected Behavior

Behavior should match Flarum 1.

Screenshots

No response

Environment

Flarum 2 beta 4
Dev instance of PianoTell
Caddy
Linux ARM64
PHP 8.3.8
Any browser.

Output of php flarum info

Flarum core: 2.0.0-beta.4
PHP version: 8.3.8
MariaDB version: 11.1.5-MariaDB-ubu2204-log
Loaded extensions: Core, date, libxml, openssl, pcre, sqlite3, zlib, ctype, curl, dom, fileinfo, filter, hash, iconv, json, mbstring, SPL, session, PDO, pdo_sqlite, standard, posix, random, readline, Reflection, Phar, SimpleXML, tokenizer, xml, xmlreader, xmlwriter, mysqlnd, bcmath, gd, mysqli, pdo_mysql, sodium, zip, Zend OPcache
+----------------------+--------------+--------+
| Flarum Extensions | | |
+----------------------+--------------+--------+
| ID | Version | Commit |
+----------------------+--------------+--------+
| flarum-flags | 2.x-dev | |
| flarum-approval | 2.x-dev | |
| flarum-tags | 2.x-dev | |
| flarum-suspend | 2.x-dev | |
| fof-byobu | 2.x-dev | |
| sycho-profile-cover | dev-master | |
| sycho-move-posts | 0.2.x-dev | |
| fof-user-directory | 2.x-dev | |
| fof-user-bio | 2.x-dev | |
| fof-sitemap | 3.0.0-beta.1 | |
| fof-links | 2.x-dev | |
| fof-ignore-users | 2.x-dev | |
| fof-formatting | 2.x-dev | |
| fof-drafts | 2.x-dev | |
| flarum-subscriptions | 2.x-dev | |
| flarum-sticky | 2.x-dev | |
| flarum-statistics | 2.x-dev | |
| flarum-mentions | 2.x-dev | |
| flarum-markdown | 2.x-dev | |
| flarum-lock | 2.x-dev | |
| flarum-likes | 2.x-dev | |
| flarum-lang-english | 2.x-dev | |
| flarum-emoji | 2.x-dev | |
| flarum-bbcode | 2.x-dev | |
| antoinefr-bbcode-fa | dev-master | |
| acpl-mobile-tab | 2.x-dev | |
+----------------------+--------------+--------+
Base URL: removed
Installation path: /var/www/html
Queue driver: sync
Session driver: file
Scheduler status: Never run
Mail driver: smtp
Debug mode: off

Possible Solution

No response

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions