Multi-part email triggers an exception

I don’t know what’s causing this issue but since I upgraded to v2022…I’ve created a few projects - mostly from scratch, and many of them suffer from this same problem.If I enable “Add plain text version in HTML email” (in Advanced Settings) then sending any email triggers an exception with the following warning:C:\WebServer\www\dfx2022.tst\vendor\soundasleep\html2text\src\Html2Text.php(173): DOMDocument::loadHTML(): htmlParseEntityRef: expecting ‘;’ in Entity, line: 18…but I have no clue where it’s expecting the missing ';'An example string being passed to that segment of code (via the HtmlToText function in phpfn.php) is:

<p>Dear Sir/Madam,</p>

<p>Thank you for registering. Your information is as follow:</p>

<p>User Name: t1</p>

<p>First Name: t</p>

<p>Last Name: 1</p>

<p>Profile Type: P</p>

<p>Profile Owner: t1</p>

<p>Email: t1@mail.com</p>

<p>Please click the following link to activate your account:<br>
<a href="h**ps://dfx2022.tst/register?action=confirm&user=t1&activatetoken=uBsxMAgOrrC68FDa_VpU2w..,W5c1oUgCkp4.,MZnEQYvyHNc.">Activate account</a>
</p>

<p>Please feel free to contact us in case of further queries.</p>

<p>
Best Regards,<br>
Support
</p>

When the exception occurs, the debug panel shows:

#0 [internal function]: PHPMaker2022\DFX2022\{closure}(2, 'DOMDocument::lo...', 'C:\\WebServer\\ww...', 173, Array)
#1 C:\WebServer\www\dfx2022.tst\vendor\soundasleep\html2text\src\Html2Text.php(173): DOMDocument->loadHTML('<p>Dear Sir/Mad...')
#2 C:\WebServer\www\dfx2022.tst\vendor\soundasleep\html2text\src\Html2Text.php(59): Soundasleep\Html2Text::getDocument('<p>Dear Sir/Mad...', false)
#3 C:\WebServer\www\dfx2022.tst\src\phpfn.php(6071): Soundasleep\Html2Text::convert('<p>Dear Sir/Mad...')
#4 C:\WebServer\www\dfx2022.tst\src\phpfn.php(2857): PHPMaker2022\DFX2022\HtmlToText('<p>Dear Sir/Mad...')
#5 C:\WebServer\www\dfx2022.tst\src\Email.php(219): PHPMaker2022\DFX2022\SendEmail('info@dfx2022.ts...', 't1@mail.com', '', 'info@dfx2022.ts...', 'Registration In...', '<p>Dear Sir/Mad...', 'HTML', 'utf-8', '', Array, Array, Array)
#6 C:\WebServer\www\dfx2022.tst\models\Register.php(533): PHPMaker2022\DFX2022\Email->send()
#7 C:\WebServer\www\dfx2022.tst\controllers\ControllerBase.php(50): PHPMaker2022\DFX2022\Register->run()
#8 C:\WebServer\www\dfx2022.tst\controllers\OthersController.php(51): PHPMaker2022\DFX2022\ControllerBase->runPage(Object(Slim\Http\ServerRequest), Object(Slim\Http\Response), Array, 'Register')
#9 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Handlers\Strategies\RequestResponse.php(43): PHPMaker2022\DFX2022\OthersController->register(Object(Slim\Http\ServerRequest), Object(Slim\Http\Response), Array)
#10 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Routing\Route.php(384): Slim\Handlers\Strategies\RequestResponse->__invoke(Array, Object(Slim\Http\ServerRequest), Object(Slim\Http\Response), Array)
#11 C:\WebServer\www\dfx2022.tst\src\PermissionMiddleware.php(119): Slim\Routing\Route->handle(Object(Slim\Http\ServerRequest))
#12 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(209): PHPMaker2022\DFX2022\PermissionMiddleware->__invoke(Object(Slim\Http\ServerRequest), Object(Slim\Routing\Route))
#13 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#14 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#15 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Routing\Route.php(341): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#16 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Routing\RouteRunner.php(84): Slim\Routing\Route->run(Object(Slim\Http\ServerRequest))
#17 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Middleware\BodyParsingMiddleware.php(68): Slim\Routing\RouteRunner->handle(Object(Slim\Http\ServerRequest))
#18 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\BodyParsingMiddleware->process(Object(Slim\Http\ServerRequest), Object(Slim\Routing\RouteRunner))
#19 C:\WebServer\www\dfx2022.tst\src\CorsMiddleware.php(44): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#20 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): PHPMaker2022\DFX2022\CorsMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#21 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php(59): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#22 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\RoutingMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#23 C:\WebServer\www\dfx2022.tst\vendor\selective\samesite-cookie\src\SameSiteCookieMiddleware.php(52): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#24 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Selective\SameSiteCookie\SameSiteCookieMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#25 C:\WebServer\www\dfx2022.tst\vendor\selective\samesite-cookie\src\SameSiteSessionMiddleware.php(59): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#26 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Selective\SameSiteCookie\SameSiteSessionMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#27 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\Middleware\ErrorMiddleware.php(107): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#28 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(147): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#29 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#30 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\App.php(215): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#31 C:\WebServer\www\dfx2022.tst\vendor\slim\slim\Slim\App.php(199): Slim\App->handle(Object(Slim\Http\ServerRequest))
#32 C:\WebServer\www\dfx2022.tst\index.php(122): Slim\App->run()
#33 {main}

I’ve tracked the issue down to line 57 of /vendor/soundasleep/html2text/src/Html2Text.php:$doc = static::getDocument($html, $options[‘ignore_errors’]);If I edit that line to…$doc = static::getDocument($html, true);…then the emails are generated and sent without an issue.Can anyone shed some light on this?

DOMDocument->loadHTML() expects HTML-encoded attributes, so you need to change “&” in your href attribute to “&”.

But that’s the issue, … it’s not MY href - it’s being generated by PHPM - that example I provided is the default activation email that gets sent as part of the the registration process.