Laravel mail: pass string instead of view
Stefan Izdrail
Founder & Senior Architect · 2026-06-29
Laravel is an amazing PHP framework with various features that help developers quickly create robust applications. One such feature is the Mail::send() function, which allows you to send emails to users from your application. The default implementation expects a file path as its first parameter - usually the Mail template file. However, there might be scenarios where you store your email templates in the database and not in a view file on the system.
The reason could range from security concerns (due to data sensitivity) or performance issues (database queries are often faster than file read/write operations). Either way, it would be more convenient to send emails directly from the content stored in your database. This blog post will explore how you can achieve this using Laravel Mail::send() function while passing plain text as a parameter instead of a view file.
Passing Plain Text Instead of View Files
$content = "Hi, welcome user!";
Mail::send($content,$data,function(){});
The above example shows how you can pass plain text as the first parameter for the email content. The $content variable contains the message that will be sent to the recipient email address. You are not specifying a file path or using view files. Simply pass the required text and other necessary data, such as $data, which stores any additional information you might need - like user details, subject line, etc.
Using Database Stored Templates
To utilize database-stored templates, you can modify your application's Mail::send() call to retrieve the email content from the database. This is a simple two-step process: 1. Retrieve the email template data from the database using an appropriate query or Eloquent model relationship. For example, suppose you have a 'mail_templates' table with columns for the subject and email body content. You can retrieve the data as follows:$template = MailTemplate::where('subject', $subject)->first();
2. Pass this database-retrieved template as the first parameter in your Mail::send() function call - ensuring that it's already formatted correctly for email rendering.
$content = $template->email_body;
Mail::send($content,$data,function(){});
This approach allows you to store and manage your email templates in a centralized location while still retaining the flexibility of using dynamic content for each user.