Abdan Syakuro
Abdan Syakuro

Reputation: 1054

No hint path defined for [mail] Laravel 5.4

I am trying to show my markdown email on view, but there's something wrong on my mail view, it shows like

ErrorException in FileViewFinder.php line 112:
No hint path defined for [mail]. (View: /opt/lampp/htdocs/ppsb_new/core/resources/views/emails/tagihan.blade.php)

and my markdown mail view

@component('mail::message')
# TAGIHAN PEMBAYARAN

Berikut tagihan anda untuk pembayaran


@component('mail::button', ['url' => ''])
wut ?
@endcomponent

Gunakan kode tagihan tersebut untuk membayar tagihan.

Thanks,<br>
{{ config('app.name') }}
@endcomponent

and there's also vendor on my views who have their components.

Upvotes: 77

Views: 78470

Answers (10)

hbakouane
hbakouane

Reputation: 41

Laravel is expecting HTML code and you're feeding it markdown.

I had the same error in my Laravel 11 app,

public function content(): Content
{
    return new Content(
        view: 'mail.user.new-primary-user-welcome-email',
        with: [...$data]
    );
}

My view had markdown code so I had the same error as you, when I changed view to markdown, it worked:

public function content(): Content
{
    return new Content(
        markdown: 'mail.user.new-primary-user-welcome-email',
        with: [...$data]
    );
}

Upvotes: 0

IMDAD HUSSAIN CHUDIYA
IMDAD HUSSAIN CHUDIYA

Reputation: 21

I had same problem of "No hint path defined for [mail]." in laravel 10, I tried so many solutions from online but i cant solve it. at last this solution work for me.

In mailable class i have sendMarkdownMail.php so i do change in that content function

Before:

public function content(): Content
    {
        return new Content(
            view: 'emails.markdown',
        );
    }

After:

public function content(): Content
    {
        return new Content(
            markdown: 'emails.markdown', // Just change view to markdown.
        );
    }

also you should check that in view there is a vender->mail folder which email formats are present if it is not present then add this by artisan command:

php artisan vendor:publish --tag=laravel-mail

Upvotes: 2

Amit Kadam
Amit Kadam

Reputation: 629

If you want to use markdown in php blade file, then call view by markdown() Or if you want to call blade file by view(), remove markdown syntax from blade file and use plane html.

Upvotes: 1

PHANTOM-X
PHANTOM-X

Reputation: 586

I had the same problem, then used this syntax and worked as a charm


@component('mail.html.message')
# Introduction

The body of your message.

@component('mail.html.button', ['url' => config('app.url')])
Button Text
@endcomponent

Thanks,<br>
{{ config('app.name') }}

@endcomponent

Where my folder structure views/mail/html for markdown messages.

and my App\Mail\NewEmail.php

<?php

namespace App\Mail;

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

class NewEmail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('mail.new-message'); // -> pointing to views/mail/new-message.blade.php containing above message
    }
}

Upvotes: 1

Smith
Smith

Reputation: 1

Try using a custom email view template, like this:

You received a message from : {{ $name }}

<p>
Name: {{ $name }}
</p>

<p>
Email: {{ $email }}
</p>

<p>
Message: {{ $user_message }}
</p>

Upvotes: -1

Yevgeniy Afanasyev
Yevgeniy Afanasyev

Reputation: 41370

if you have your email views in ...views/mail, that is how you can specify it:

app('view')->addNamespace('mail', resource_path('views') . '/mail');

Upvotes: 4

Philip E
Philip E

Reputation: 858

If you have a View not found issue with laravel mail. After trying the accepted answer and it doesn't work, check yourtemplate.blade.php markdown file and ensure you are not closing @endcomponent twice without a opening @component

Upvotes: 3

Lin jinhua
Lin jinhua

Reputation: 21

I used caffeinated/modules for laravel5.2.

If you are similar to me you can run this:

php artisan module:list
+------+-------+-------+-------------------------------------+----------+
| #    | Name  | Slug  | Description                         | Status   |
+------+-------+-------+-------------------------------------+----------+
| 9001 | Frame | Frame | this is a basic frame for both web. | Disabled |
| 9001 | Index | Index | this is web default index           | Enabled  |
| 9001 | Admin | Admin | This is admin of meixin project     | Enabled  |
+------+-------+-------+-------------------------------------+----------+

All right, you can see the disabled option.

php artisan module:enable Frame

Module is already enabled.

That's all, hope this helps.

Upvotes: -4

Pete Johnson
Pete Johnson

Reputation: 1774

You need to call the markdown() method in the build() method of your mailable - not the view() method. See the example below:

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->markdown('view-to-mail');
}

Upvotes: 175

Alex Kyriakidis
Alex Kyriakidis

Reputation: 2881

To use Markdown mailable messages, you have to update the build method of your Mailable class and instead of view(), you have to use markdown().

Like this:

public function build()
{
    return $this->markdown('emails.registered');
}

Upvotes: 33

Related Questions