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

dugoyd69's avatar

Laravel Mail htmlspecialchars()

Hi everyone, I have a problem in sending an email using Laravel Mail. Here is my current code.

        $name = $user_profile->first_name . " " . $user_profile->last_name;
        $email = $user->email;
        $message = $request->message;
        $pass = $user->secret;
        $url = env("BASEURL_CONSULTANT");

        // dd(gettype($name), gettype($email), gettype($message), gettype($pass), gettype($url));

        // send email using Mail facade
        Mail::to($email)
            ->send(new ConsultantInvite($name, $email, $message, $pass, $url));

my mailable class

public function __construct(
    public $name,
    public $email,
    public $message,
    public $pass,
    public $url
) {
}

/**
 * Get the message envelope.
 */
public function envelope(): Envelope
{
    return new Envelope(
        from: new Address(Config::get("mail.from.address"), Config::get("app.name")),
        replyTo: [
            new Address(Config::get("mail.from.address"), Config::get("app.name"))
        ],
        subject: 'Consultant Invite',
    );
}

/**
 * Get the message content definition.
 */
public function content(): Content
{
    return new Content(
        view: "email.consultant-invite",
    );
}

/**
 * Get the attachments for the message.
 *
 * @return array<int, \Illuminate\Mail\Mailables\Attachment>
 */
public function attachments(): array
{
    return [];
}

the problem here is every time I create the user and send an email, I always get this error

TypeError: htmlspecialchars(): Argument #1 ($string) must be of type string, Illuminate\Mail\Message given in C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Support\helpers.php:124 Stack trace: #0 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Support\helpers.php(124): htmlspecialchars(Object(Illuminate\Mail\Message), 11, 'UTF-8', true) #1 C:\wamp64\www\values-pendulum-laravel\storage\framework\views\372ab125103ed4f97e70bd1960e035dd.php(25): e(Object(Illuminate\Mail\Message)) #2 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Filesystem\Filesystem.php(123): require('C:\wamp64\www\v...') #3 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Filesystem\Filesystem.php(124): Illuminate\Filesystem\Filesystem::Illuminate\Filesystem{closure}() #4 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\View\Engines\PhpEngine.php(58): Illuminate\Filesystem\Filesystem->getRequire('C:\wamp64\www\v...', Array) #5 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\View\Engines\CompilerEngine.php(72): Illuminate\View\Engines\PhpEngine->evaluatePath('C:\wamp64\www\v...', Array) #6 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\View\View.php(207): Illuminate\View\Engines\CompilerEngine->get('C:\wamp64\www\v...', Array) #7 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\View\View.php(190): Illuminate\View\View->getContents() #8 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\View\View.php(159): Illuminate\View\View->renderContents() #9 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php(433): Illuminate\View\View->render() #10 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php(408): Illuminate\Mail\Mailer->renderView('email.consultan...', Array) #11 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php(320): Illuminate\Mail\Mailer->addContent(Object(Illuminate\Mail\Message), 'email.consultan...', NULL, NULL, Array) #12 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailable.php(213): Illuminate\Mail\Mailer->send('email.consultan...', Array, Object(Closure)) #13 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Support\Traits\Localizable.php(19): Illuminate\Mail\Mailable->Illuminate\Mail{closure}() #14 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailable.php(214): Illuminate\Mail\Mailable->withLocale(NULL, Object(Closure)) #15 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php(357): Illuminate\Mail\Mailable->send(Object(Illuminate\Mail\Mailer)) #16 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php(301): Illuminate\Mail\Mailer->sendMailable(Object(App\Mail\ConsultantInvite)) #17 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Mail\PendingMail.php(124): Illuminate\Mail\Mailer->send(Object(App\Mail\ConsultantInvite)) #18 C:\wamp64\www\values-pendulum-laravel\app\Http\Controllers\AdminController.php(257): Illuminate\Mail\PendingMail->send(Object(App\Mail\ConsultantInvite)) #19 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): App\Http\Controllers\AdminController->sendConsultantInvite(Object(Illuminate\Http\Request)) #20 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction('sendConsultantI...', Array) #21 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php(260): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\AdminController), 'sendConsultantI...') #22 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php(205): Illuminate\Routing\Route->runController() #23 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php(806): Illuminate\Routing\Route->run() #24 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(144): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #25 C:\wamp64\www\values-pendulum-laravel\app\Http\Middleware\AdminMiddleware.php(32): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #26 C:\wamp64\www\values-pendulum-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(183): App\Http\Middleware\AdminMiddleware->handle(Object(Illuminate\Http\Request),

0 likes
9 replies
DhPandya's avatar

@dugoyd69 Please add full error trace. Moreover please check that you are getting values in Config::get().

Snapey's avatar

this error occurs when you try to use {{ }} in your view but give it an object instead of a string.

Also, don't use env in your code. It will return null if you cache config.

dugoyd69's avatar

@Snapey I changed my mailable to this

public function content(): Content
    {
        return new Content(
            view: "email.consultant-invite",
            with: [
                "user_name" => $this->name,
                "user_email" => $this->email,
                "user_message" => $this->message,
                "user_pass" => $this->pass,
                "user_url" => $this->url,
            ],
        );
    } 

so now I can user {{ $user_name }} in my view. Thanks for the tips.

MohamedTammam's avatar
Level 51

Don't use public $message property in your mail. Use different variable name.

For example:

public function __construct(
    public $name,
    public $email,
    public $msg, // <- Updated
    public $pass,
    public $url
) {
}
Snapey's avatar

@MohamedTammam Yes, thats probably the issue. OP changing to user_message gets round the issue without understanding why.

dugoyd69's avatar

@MohamedTammam I'm trying to do the same in laravel documentation but it's not working in my end. This is the code in laravel documentation

public function __construct(
        public Order $order,
    ) {}
 
    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        return new Content(
            view: 'mail.orders.shipped',
        );
    }

Please or to participate in this conversation.