Twill: Sending Markdown mail fails

Created on 20 Aug 2018  路  3Comments  路  Source: area17/twill

Sending any mail from Laravel with Twill enabled results in the following error:

ErrorException thrown with message "View [emails.html.header] not found. (View: /Users/dafyd/Development/personal/medalnet/vendor/area17/twill/views/emails/html/message.blade.php) (View: /Users/dafyd/Development/personal/medalnet/vendor/area17/twill/views/emails/html/message.blade.php)"

Stacktrace:

86 ErrorException in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php:137

85 ErrorException in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php:137

84 InvalidArgumentException in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php:137

83 Illuminate\View\FileViewFinder:findInPaths in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php:79

82 Illuminate\View\FileViewFinder:find in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Factory.php:128

81 Illuminate\View\Factory:make in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php:64

80 Illuminate\View\Factory:renderComponent in /Users/dafyd/Development/personal/medalnet/storage/framework/views/1902003e19f5ef8ca431d77e026152380daa02f0.php:7

79 include in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:43

78 Illuminate\View\Engines\PhpEngine:evaluatePath in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:59

77 Illuminate\View\Engines\CompilerEngine:get in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/View.php:142

76 Illuminate\View\View:getContents in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/View.php:125

75 Illuminate\View\View:renderContents in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/View.php:90

74 Illuminate\View\View:render in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php:64

73 Illuminate\View\Factory:renderComponent in /Users/dafyd/Development/personal/medalnet/storage/framework/views/cc9da87a672670f40a03103aba3cfb2c341b8f6b.php:19

72 include in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:43

71 Illuminate\View\Engines\PhpEngine:evaluatePath in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:59

70 Illuminate\View\Engines\CompilerEngine:get in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/View.php:142

69 Illuminate\View\View:getContents in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/View.php:125

68 Illuminate\View\View:renderContents in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/View.php:90

67 Illuminate\View\View:render in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php:61

66 Illuminate\Mail\Markdown:render in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php:248

65 Illuminate\Mail\Mailable:buildMarkdownView in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php:220

64 Illuminate\Mail\Mailable:buildView in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php:142

63 Illuminate\Mail\Mailable:Illuminate\Mailmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php:18

62 Illuminate\Mail\Mailable:withLocale in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php:149

61 Illuminate\Mail\Mailable:send in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php:263

60 Illuminate\Mail\Mailer:sendMailable in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php:218

59 Illuminate\Mail\Mailer:send in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php:119

58 Illuminate\Mail\PendingMail:send in /Users/dafyd/Development/personal/medalnet/app/Http/Controllers/ContactController.php:37

57 App\Http\Controllers\ContactController:send in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54

56 call_user_func_array in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54

55 Illuminate\Routing\Controller:callAction in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45

54 Illuminate\Routing\ControllerDispatcher:dispatch in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Route.php:212

53 Illuminate\Routing\Route:runController in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Route.php:169

52 Illuminate\Routing\Route:run in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Router.php:665

51 Illuminate\Routing\Router:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30

50 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/app/Http/Middleware/SetLocale.php:26

49 App\Http\Middleware\SetLocale:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

48 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

47 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41

46 Illuminate\Routing\Middleware\SubstituteBindings:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

45 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

44 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:68

43 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

42 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

41 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49

40 Illuminate\View\Middleware\ShareErrorsFromSession:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

39 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

38 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63

37 Illuminate\Session\Middleware\StartSession:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

36 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

35 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37

34 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

33 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

32 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66

31 Illuminate\Cookie\Middleware\EncryptCookies:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

30 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

29 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104

28 Illuminate\Pipeline\Pipeline:then in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Router.php:667

27 Illuminate\Routing\Router:runRouteWithinStack in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Router.php:642

26 Illuminate\Routing\Router:runRoute in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Router.php:608

25 Illuminate\Routing\Router:dispatchToRoute in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Router.php:597

24 Illuminate\Routing\Router:dispatch in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176

23 Illuminate\Foundation\Http\Kernel:Illuminate\Foundation\Httpmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30

22 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php:65

21 Barryvdh\Debugbar\Middleware\InjectDebugbar:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

20 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

19 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/fideloper/proxy/src/TrustProxies.php:57

18 Fideloper\Proxy\TrustProxies:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

17 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

16 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:31

15 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

14 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

13 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:31

12 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

11 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

10 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27

9 Illuminate\Foundation\Http\Middleware\ValidatePostSize:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

8 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

7 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:62

6 Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:handle in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:151

5 Illuminate\Pipeline\Pipeline:Illuminate\Pipelinemd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53

4 Illuminate\Routing\Pipeline:Illuminate\Routingmd5-4ffd189c466a889f808670e2389cf458closure} in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104

3 Illuminate\Pipeline\Pipeline:then in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151

2 Illuminate\Foundation\Http\Kernel:sendRequestThroughRouter in /Users/dafyd/Development/personal/medalnet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116

1 Illuminate\Foundation\Http\Kernel:handle in /Users/dafyd/Development/personal/medalnet/public/index.php:55

0 require in /Users/dafyd/.composer/vendor/laravel/valet/server.php:147

I have published both the Laravel Mail views (php artisan vendor:publish --tag=laravel-mail) and Twill's own views (php artisan vendor:publish --tag=views --provider=A17\Twill\TwillServiceProvider).

It seems the following lines in TwillServiceProvider (132-135) are causing the error (at least, the mail sends when they are commented out):

config(['mail.markdown.paths' => array_merge(
    [__DIR__ . '/../views/emails'],
    config('mail.markdown.paths')
)]);

Setting the first path to a full value seems to work, too:

config(['mail.markdown.paths' => array_merge(
    ['/vendor/area17/twill/views/emails'],
    config('mail.markdown.paths')
)]);

Actually, I'm a little confused as to the purpose of this config setting. Wouldn't publishing the views do this anyway, while allowing the user a little more control over them?

bug

Most helpful comment

Just a note to inform that we also ran into this issue. It breaks our mails in the Laravel app, so that's not really convenient. A fix would be appreciated.

All 3 comments

This bug also prevents default laravel email verification message being send
@dafyd solution works

Hi guys, sorry for the delay on this one.

I was able to reproduce during my testing for 1.2.1 and would really like to fix asap as it can definitely be quite a blocker for Laravel developers.

The idea right now is to get Twill's reset password and welcome emails to render with the correct views with our custom styling. Your proposed fix sends Twill's emails using default Laravel styling. It seems like I misunderstood or something is not working with the markdown paths configuration provided by Laravel. How would one go about having multiple emails requiring different templates and styles in a regular Laravel app?

In the end I think we should move Twill's email templates away from using Laravel's provided partials in favor of a simple blade vlew to avoid conflicting with the default setup for your application itself.

Regarding publishing views, this is something we intentionally not recommend as it could make updates very difficult and error prone in the long run. We definitely can't prevent anyone from doing it but our installation process does not publish views and our documentation does not suggest developers to do so. We definitely understand how useful it can be though and I'm happy to discuss how we could make Twill more extensible while maintaining a seamless upgrade path!

Just a note to inform that we also ran into this issue. It breaks our mails in the Laravel app, so that's not really convenient. A fix would be appreciated.

Was this page helpful?
0 / 5 - 0 ratings