Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

lat4732's avatar
Level 12

Error when sending mail

Hey

I'm getting the following error when trying to send mail

DOMDocument::loadHTML(): Argument #1 ($source) must not be empty 

Here's my controller code

Mail::to($company->user->email)->send(new SendCompanyNotificationForNewReview($review_id, $stars, $author_name, $companyholder_name));

app/Mail/SendCompanyNotificationForNewReview.php

class SendCompanyNotificationForNewReview extends Mailable
{
    use Queueable, SerializesModels;

    public $review_id;
    public $stars;
    public $author_name;
    public $companyholder_name;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($review_id, $stars, $author_name, $companyholder_name)
    {
        $this->review_id = $review_id;
        $this->stars = $stars;
        $this->author_name = $author_name;
        $this->companyholder_name = $companyholder_name;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('New ' . $this->stars . ' star review for your website in ' . config('app.name'))
        ->markdown('emails.sendcompanynotificationfornewreview', ['review_id' => $this->review_id, 'review_stars' => $this->stars, 'author_name' => $this->author_name, 'companyholder_name' => $this->companyholder_name]);
    }
}

What's could be the problem?

0 likes
25 replies
lat4732's avatar
Level 12

@sr57 laravel.log

local.ERROR: DOMDocument::loadHTML(): Argument #1 ($source) must not be empty {"userId":5,"exception":"[object] (ValueError(code: 0): DOMDocument::loadHTML(): Argument #1 ($source) must not be empty at /home/user/public_html/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php:116)
lat4732's avatar
Level 12

@sr57

[2022-03-30 18:40:22] local.ERROR: DOMDocument::loadHTML(): Argument #1 ($source) must not be empty {"userId":1,"exception":"[object] (ValueError(code: 0): DOMDocument::loadHTML(): Argument #1 ($source) must not be empty at /home/userdev/public_html/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php:116)
[stacktrace]
#0 /home/userdev/public_html/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php(116): DOMDocument->loadHTML('')
#1 /home/userdev/public_html/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php(36): TijsVerkoyen\CssToInlineStyles\CssToInlineStyles->createDomDocumentFromHtml('')
#2 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php(74): TijsVerkoyen\CssToInlineStyles\CssToInlineStyles->convert('', '/* Base */\
\
bod...')
#3 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(309): Illuminate\Mail\Markdown->render('emails.sendcomp...', Array)
#4 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(279): Illuminate\Mail\Mailable->buildMarkdownView()
#5 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(181): Illuminate\Mail\Mailable->buildView()
#6 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php(19): Illuminate\Mail\Mailable->Illuminate\Mail\{closure}()
#7 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(188): Illuminate\Mail\Mailable->withLocale(NULL, Object(Closure))
#8 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(304): Illuminate\Mail\Mailable->send(Object(Illuminate\Mail\Mailer))
#9 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(258): Illuminate\Mail\Mailer->sendMailable(Object(App\Mail\SendCompanyNotificationForNewReview))
#10 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php(124): Illuminate\Mail\Mailer->send(Object(App\Mail\SendCompanyNotificationForNewReview))
#11 /home/userdev/public_html/app/Http/Controllers/WriteController.php(107): Illuminate\Mail\PendingMail->send(Object(App\Mail\SendCompanyNotificationForNewReview))
#12 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\WriteController->store(Object(Illuminate\Http\Request), Object(App\Models\Websites))
#13 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('store', Array)
#14 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\WriteController), 'store')
#15 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController()
#16 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run()
#17 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#18 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php(30): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#19 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Auth\Middleware\EnsureEmailIsVerified->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /home/userdev/public_html/app/Http/Middleware/Language.php(22): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\Language->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#25 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#26 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'sanctum')
#28 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#29 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#31 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(58): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\AuthenticateSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /home/userdev/public_html/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))
#36 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#40 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#41 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#43 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#44 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#45 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#46 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#47 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#48 /home/userdev/public_html/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Livewire\DisableBrowserCache->handle(Object(Illuminate\Http\Request), Object(Closure))
#50 /home/userdev/public_html/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Barryvdh\Debugbar\Middleware\InjectDebugbar->handle(Object(Illuminate\Http\Request), Object(Closure))
#52 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#53 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#54 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#55 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#56 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#57 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#58 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#59 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#60 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#61 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#62 /home/userdev/public_html/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#63 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#64 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#65 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#66 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#67 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#68 /home/userdev/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#69 /home/userdev/public_html/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#70 {main}
"} 

Sinnbeck's avatar

Can you show emails.sendcompanynotificationfornewreview

That is quite a long filename. Did you try just using something simple? newreview.blade.php

lat4732's avatar
Level 12

@Sinnbeck

@component('mail::message')
<h1>Hello, {{ $companyholder_name }}!</h1>
<p>You received new {{ $review_stars }} star review from {{ $author_name }} for your company in {{ config('app.name') }}.</p>
<a href="{{ route('review.index', ['review' => $review_id]) }}"><button>Give it a read</button></a>
@endcomponent

I can try to rename it.

Sinnbeck's avatar

@Laralex Can you try this?

 $this->markdown('emails.sendcompanynotificationfornewreview', ['review_id' => $this->review_id, 'review_stars' => $this->stars, 'author_name' => $this->author_name, 'companyholder_name' => $this->companyholder_name]);
dd($this->buildMarkdownView());
lat4732's avatar
Level 12

Changing from ->markdown() to ->view() cleared the error. Can ->view() cause problems?

Sinnbeck's avatar

@Laralex Yes it does not use markdown, so you need to use a regular view with css etc.

lat4732's avatar
Level 12

@Sinnbeck But my other emails are using markdown and I didn't faced any problems. What is causing the problem here?

Sinnbeck's avatar

@Laralex That is what we are trying to find out. I dont think anyone has spotted the problem yet, so we need to do some debugging.

lat4732's avatar
Level 12

@Sinnbeck OK, after chaning to ->view() I received an email but there is nothing inside. The email header (title) is correct but there is nothing inside the email contents. What can I do?

Sinnbeck's avatar

@Laralex Sounds like that file is returning nothing. Did you perhaps forget .blade. in the file name or something?

lat4732's avatar
Level 12

@Sinnbeck It's named newreview.blade.php.

I'm sharing app/Mail/SendCompanyNotificationForNewReview.php again

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SendCompanyNotificationForNewReview extends Mailable
{
    use Queueable, SerializesModels;

    public $review_id;
    public $stars;
    public $author_name;
    public $companyholder_name;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($review_id, $stars, $author_name, $companyholder_name)
    {
        $this->review_id = $review_id;
        $this->stars = $stars;
        $this->author_name = $author_name;
        $this->companyholder_name = $companyholder_name;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject('New ' . $this->stars . ' star review for your website in ' . config('app.name'))
        ->view('emails.newreview', ['review_id' => $this->review_id, 'review_stars' => $this->stars, 'author_name' => $this->author_name, 'companyholder_name' => $this->companyholder_name]);
    }
}
lat4732's avatar
Level 12

@Sinnbeck

return $this->subject('New ' . $this->stars . ' star review for your website in ' . config('app.name'))
        ->markdown('emails.newreview', [
            'review_id' => $this->review_id, 
            'review_stars' => $this->stars, 
            'author_name' => $this->author_name, 
            'companyholder_name' => $this->companyholder_name
        ]);
        dd($this->buildMarkdownView());

returns the same error.

DOMDocument::loadHTML(): Argument #1 ($source) must not be empty 
Sinnbeck's avatar

@Laralex Does it work if you set it to use any of your other markdown email templates? I am trying to figure out if the error is with the mailable or the template.

lat4732's avatar
Level 12

@Sinnbeck When I use other markdown email template it's not showing any error. Shouldn't it die&dump when we have dd($this->buildMarkdownView()) in the SendCompanyNotificationForNewReview.php ?

Sinnbeck's avatar

@Laralex Ah just noticed you did something else than suggested. You are returning before the dd. In php you cannot run any code after a return.

But interesting that it works with another template. Can you try creating a new file to test with, and just write some test text in it to see if it work

This works..
Sinnbeck's avatar
Sinnbeck
Best Answer
Level 102

Just did some digging around, and the error is most likely due to invalid html.. This isnt valid as you cannot have a button inside an a tag. Remove this line and I am sure the error is gone.

<a href="{{ route('review.index', ['review' => $review_id]) }}"><button>Give it a read</button></a>

Instead use the button component: https://laravel.com/docs/8.x/mail#button-component

1 like
lat4732's avatar
Level 12

@Sinnbeck Ok, so.

$this->subject('New ' . $this->stars . ' star review for your website in ' . config('app.name'))
        ->view('emails.newreview', [
            'review_id' => $this->review_id, 
            'review_stars' => $this->stars, 
            'author_name' => $this->author_name, 
            'companyholder_name' => $this->companyholder_name
        ]);
        dd($this->buildMarkdownView());

this is returning

View [] not found. 

and this

$this->subject('New ' . $this->stars . ' star review for your website in ' . config('app.name'))
        ->markdown('emails.newreview', [
            'review_id' => $this->review_id, 
            'review_stars' => $this->stars, 
            'author_name' => $this->author_name, 
            'companyholder_name' => $this->companyholder_name
        ]);
        dd($this->buildMarkdownView())

is returning the same DOM error

lat4732's avatar
Level 12

Thanks to @sinnbeck as always.

The error is due to invalid HTML in my email template.

Please or to participate in this conversation.