#[1]gnikyt feed [2]gnikyt Code ramblings. Setting Up Lumen with Mailer /* Nov 19, 2017 — 5.3KB */ What is Lumen [3]Lumen is a micro-framework built by Laravel. Its geared towards small services like APIs, job handling, or very small projects. Laravel is all-inclusive, whereas Lumen is more bare-bones but moderately featured; however, it doesn’t feel as lean as something like Slim. Setting Up Mailing Recently I ported a small app from Sinatra to Lumen for trial with a client. Its a job processing app for Shopify, where it would take data from a webhook, process it with a worker, and send back some data later. It needed to be fast, as, like other webhook-focused apps, it has to keep up with the high demand. One issue I ran into was mailing, it’s not enabled by default in Lumen, and there are many posts throughout Google of people attempting to set it up. There are also many outdated ways which only worked for the old version of Lumen. Through trial and error, I managed to find a working setup I thought I would share. Setup First, run composer require illuminate/mail:5.5 to grab the mailing component. Next, open bootstrap/app.php, find $app->register(App\Providers\AppServiceProvider::class); and uncomment it, if not already. After this is done, open the app provider in app/Providers/. At the bottom of the register method, paste in the following: app->singleton( 'mailer', function ($app) { return $app->loadComponent('mail', 'Illuminate\Mail\MailServiceProvider' , 'mailer'); } ); // Aliases $this->app->alias('mailer', \Illuminate\Contracts\Mail\Mailer::class); To make mailing queue-able and able to be processed in the background, simply add: app->make('queue'); And see my Lumen Redis tutorial to setup Redis for processing. Next, setup the basic config config/mail.php: env('MAIL_DRIVER'), 'host' => env('MAIL_HOST'), 'port' => env('MAIL_PORT'), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS'), 'name' => env('MAIL_FROM_NAME'), ], 'encryption' => env('MAIL_ENCRYPTION'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'markdown' => [ 'theme' => 'default', 'paths' => [ resource_path('views/vendor/mail'), ], ], ]; That’s it, you’re done the setup! Don’t forget to set up your environment variables for production. Creating a Mailer Now that we’re setup, you can create a mailer in app/Mail/, here’s an example to go by (app/Mail/Winnings): to_address = $to_address; $this->winnings = $winnings; } /** * Build the message. * * @return $this */ public function build() { return $this ->to($this->to_address) ->subject('Your winnings!') ->view('emails.winnings') ->with( [ 'winnings' => $this->winnings ] ); } } Now, create a view, resources/views/emails/winnings.blade.php for simply HTML-only,: {% raw %}You won {{ $winnings }}!{% endraw %} Sending Mail Now that we have it setup, and a mailable created, we can send. In your job, controller, or where ever you need it: build() ); Mail::assertSent(Winnings::class, function ($mail) { return $mail->hasTo('john@doe.com') && $mail->subject === 'Your winnings!' && $mail->viewData['winnings'] === 15.00; }); } } Running the tests should pass if everything is set up correctly. For more information on testing mailables, see [5]Laravel’s documentation on faking. I hope this was a quick and useful setup for anyone having issues. Good luck! [6]MD | [7]TXT | [8]CC-4.0 This post is 7 years old and may contain outdated information. __________________________________________________________________ [9]Ty King Ty King A self-taught, seasoned, and versatile developer from Newfoundland. Crafting innovative solutions with care and expertise. [10]Github [11]About Me [12]CV [13]RSS * * * * * * * * * * References Visible links: 1. /rss.xml 2. / 3. https://lumen.laravel.com/ 4. https://laravel.com/docs/5.5/mail#sending-mail 5. https://laravel.com/docs/5.5/mocking#mail-fake 6. /setting-up-lumen-with-mail/index.md 7. /setting-up-lumen-with-mail/index.txt 8. https://creativecommons.org/licenses/by/4.0/ 9. /about 10. https://github.com/gnikyt 11. /about 12. /assets/files/cv.pdf 13. /rss.xml Hidden links: 15. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-1 16. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-2 17. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-3 18. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-4 19. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-5 20. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-6 21. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-7 22. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-8 23. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-9 24. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-10 25. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-11 26. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-12 27. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb1-13 28. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb2-1 29. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb2-2 30. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb2-3 31. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb2-4 32. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb2-5 33. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-1 34. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-2 35. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-3 36. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-4 37. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-5 38. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-6 39. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-7 40. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-8 41. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-9 42. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-10 43. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-11 44. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-12 45. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-13 46. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-14 47. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-15 48. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-16 49. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-17 50. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-18 51. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-19 52. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb3-20 53. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-1 54. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-2 55. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-3 56. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-4 57. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-5 58. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-6 59. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-7 60. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-8 61. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-9 62. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-10 63. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-11 64. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-12 65. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-13 66. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-14 67. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-15 68. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-16 69. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-17 70. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-18 71. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-19 72. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-20 73. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-21 74. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-22 75. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-23 76. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-24 77. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-25 78. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-26 79. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-27 80. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-28 81. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-29 82. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-30 83. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-31 84. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-32 85. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-33 86. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-34 87. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-35 88. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-36 89. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-37 90. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-38 91. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-39 92. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-40 93. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-41 94. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-42 95. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-43 96. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-44 97. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-45 98. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-46 99. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-47 100. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb4-48 101. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb5-1 102. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-1 103. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-2 104. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-3 105. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-4 106. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-5 107. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-6 108. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-7 109. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-8 110. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-9 111. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-10 112. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-11 113. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb6-12 114. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-1 115. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-2 116. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-3 117. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-4 118. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-5 119. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-6 120. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-7 121. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-8 122. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-9 123. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-10 124. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-11 125. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-12 126. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-13 127. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-14 128. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-15 129. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-16 130. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-17 131. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-18 132. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-19 133. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-20 134. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-21 135. localhost/tmp/lynxXXXXNzimhP/L3275604-9945TMP.html#cb7-22