In this guide we'll show you how to create a simple HTML contact form using easy to understand code.
One of the most useful pages of any website is the HTML contact form page. No website should be without a contact form.
How To Choose A Name For Your Email Address: If you are just starting to get online now and are planning on getting an email address like email protected, it will be tough, as most of these email addresses are already taken. The first thing you need to do is select which email service you want to use. My recommendation would be Gmail or Outlook. So how do you avoid email disaster? With considered planning you can master proper business email format and create an email that conveys your message without ruining your business reputation. Here are four easy guidelines to writing proper business emails: Don't Rush. A hurried email is often a badly formatted, badly written email.
Scroll down a little to see our form created using HTML for the front-end. Further down you will see the PHP code for the form processing at the back-end - this is used to take the form submissions and send it to you by email.
Index of this page:
The form shown below is a 'bare-bone' version only, however, if you want to look at a fuller version, please download our free contact form
Already have a form and need some help?
We offer installation, upgrades, fixes, and customisations. Get in touch to see how we can help.Form created using HTML
You can copy and paste this directly into your HTML page, or use it as a basis for your contact us page.
The CSS styles to use with the HTML form above
File Name: contact-form.css (you must save using this name exactly)The PHP Code which captures and Emails your website form
The PHP code below is very basic - it will capture the form fields specified in the HTML form above (Name, Email, and Message). The fields are then sent off to your email address in plain text.
Note: You need to edit 2 parts of the script below. You need to set your email address (this will not be available for anyone to see, it is only used by the server to send your email). You can also specify an email subject line (or just leave the one which is there).
File Name: contact-form-process.php (you must use this filename exactly)Save the files above. Once you edit the form to fit with your design, you are ready to try it out.
How the HTML form will look
Download free contact form using the link below. This version contains many more advanced features.
Download Free Contact FormHTML form field examples
To add new fields to your form, just copy and paste the field type you need from the examples below.
We have included a breakdown of different HTML Form tags.
HTML Form Tags
HTML website forms should be enclosed inside the FORM tags. There are various parameter options available, the most common ones are:
action - this allows you to tell the form where to go once submitted (usually the filename of a script which will read and process the form data which has been submitted).
name - it's usually a good idea to give your forms a name, this is used to uniquely identify your form on a given page.
method - the value of this should be POST or GET. Forms should usually be set to use POST (as GET will attach the form data onto the page URL which is almost always a bad idea for security reasons). There are some other methods available, but we will not discuss these here.
HTML Text Field - Single Line
This is without doubt the most common field you will find.
HTML Textarea (multiple lines text field )
The multi-line text field (commonly known as a textarea field) is more suitable to takes a larger block of text from your visitors. This is ideal for messages.
HTML Radio Buttons
When you want your users to pick one item from a short-list, the radio button set is ideal.
Radio button group in actionHTML Check box fields (checkboxes)
Imazing 2 9 5 (10630) download free. When you want your visitors to pick one or more items from a short-list, then checkboxes are ideal.
Checkboxes in actionHTML File Upload Field (field selector)
Sometimes it may be good to offer your website users the option to upload a file. For this, you could use the HTML field type file. If you are using this option you also need to include an additional option to the FORM tag enctype='multipart/form-data'
HTML Password Field
If you ever need to ask your users to enter a password into a form, then you should use the special text field type password. Using this option will mask each character as the user types, allowing them to type in secret.
HTML drop-downs (also sometimes known as 'selects' or 'combo-boxes')
When you want your visitors to pick something from a list, you could use a drop-down list. These are sometimes known as option selects, select fields, or combo-boxes. By default only one option can be selected, however, you can allow multiple selections by including the word multiple to your select tag (this will also alter the appearance of the field).
Select Something:
HTML Submit button
Finally, every form should allow the user the option of submitting the form data. Form submissions are usually handled by using an HTML button. The button field is an input type field (as text and password fields are), however, these special fields are of type submit. To specify the text which appears on the button, we use the value parameter to state our value (in the example below we state 'Send Form').
HTML Reset button
Occasionally you may want to allow your visitors to reset a form back to its default state. This is accomplished by using the input type of reset. As with the Submit button, you specify the button text using the value parameter. Reset buttons are not very common these days but can still be useful under certain circumstances.
- Introduction
- Writing Mailables
- Markdown Mailables
- Sending Mail
- Rendering Mailables
Introduction
Sending email doesn't have to be complicated. Laravel provides a clean, simple email API powered by the popular SwiftMailer library. Laravel and SwiftMailer provide drivers for sending email via SMTP, Mailgun, Postmark, Amazon SES, and sendmail
, allowing you to quickly get started sending mail through a local or cloud based service of your choice.
Configuration
Laravel's email services may be configured via your application's config/mail.php
configuration file. Each mailer configured within this file may have its own unique configuration and even its own unique 'transport', allowing your application to use different email services to send certain email messages. For example, your application might use Postmark to send transactional emails while using Amazon SES to send bulk emails.
Within your mail
configuration file, you will find a mailers
configuration array. This array contains a sample configuration entry for each of the major mail drivers / transports supported by Laravel, while the default
configuration value determines which mailer will be used by default when your application needs to send an email message.
Driver / Transport Prerequisites
The API based drivers such as Mailgun and Postmark are often simpler and faster than sending mail via SMTP servers. Whenever possible, we recommend that you use one of these drivers. All of the API based drivers require the Guzzle HTTP library, which may be installed via the Composer package manager:
Mailgun Driver
To use the Mailgun driver, first install the Guzzle HTTP library. Then, set the default
option in your config/mail.php
configuration file to mailgun
. Next, verify that your config/services.php
configuration file contains the following options:
If you are not using the United States Mailgun region, you may define your region's endpoint in the services
configuration file:
Postmark Driver
To use the Postmark driver, install Postmark's SwiftMailer transport via Composer:
Next, install the Guzzle HTTP library and set the default
option in your config/mail.php
configuration file to postmark
. Finally, verify that your config/services.php
configuration file contains the following options:
If you would like to specify the Postmark message stream that should be used by a given mailer, you may add the message_stream_id
configuration option to the mailer's configuration array. This configuration array can be found in your application's config/mail.php
configuration file:
This way you are also able to set up multiple Postmark mailers with different message streams.
SES Driver
To use the Amazon SES driver you must first install the Amazon AWS SDK for PHP. You may install this library via the Composer package manager:
Next, set the default
option in your config/mail.php
configuration file to ses
and verify that your config/services.php
configuration file contains the following options:
If you would like to define additional options that Laravel should pass to the AWS SDK's SendRawEmail
method when sending an email, you may define an options
array within your ses
configuration:
Generating Mailables
When building Laravel applications, each type of email sent by your application is represented as a 'mailable' class. These classes are stored in the app/Mail
directory. Don't worry if you don't see this directory in your application, since it will be generated for you when you create your first mailable class using the make:mail
Artisan command:
Writing Mailables
Once you have generated a mailable class, open it up so we can explore its contents. First, note that all of a mailable class' configuration is done in the build
method. Within this method, you may call various methods such as from
, subject
, view
, and attach
to configure the email's presentation and delivery.
Configuring The Sender
Using The from
Method
First, let's explore configuring the sender of the email. Or, in other words, who the email is going to be 'from'. There are two ways to configure the sender. First, you may use the from
method within your mailable class' build
method:
Using A Global from
Address
However, if your application uses the same 'from' address for all of its emails, it can become cumbersome to call the from
method in each mailable class you generate. Instead, you may specify a global 'from' address in your config/mail.php
configuration file. This address will be used if no other 'from' address is specified within the mailable class:
In addition, you may define a global 'reply_to' address within your config/mail.php
configuration file:
Configuring The View
Within a mailable class' build
method, you may use the view
method to specify which template should be used when rendering the email's contents. Since each email typically uses a Blade template to render its contents, you have the full power and convenience of the Blade templating engine when building your email's HTML:
{tip} You may wish to create a resources/views/emails
directory to house all of your email templates; however, you are free to place them wherever you wish within your resources/views
directory.
Plain Text Emails
If you would like to define a plain-text version of your email, you may use the text
method. Like the view
method, the text
method accepts a template name which will be used to render the contents of the email. You are free to define both an HTML and plain-text version of your message:
View Data
Via Public Properties
Typically, you will want to pass some data to your view that you can utilize when rendering the email's HTML. There are two ways you may make data available to your view. First, any public property defined on your mailable class will automatically be made available to the view. So, for example, you may pass data into your mailable class' constructor and set that data to public properties defined on the class:
Once the data has been set to a public property, it will automatically be available in your view, so you may access it like you would access any other data in your Blade templates:
Via The with
Method:
If you would like to customize the format of your email's data before it is sent to the template, you may manually pass your data to the view via the with
method. Typically, you will still pass data via the mailable class' constructor; however, you should set this data to protected
or private
properties so the data is not automatically made available to the template. Then, when calling the with
method, pass an array of data that you wish to make available to the template:
Once the data has been passed to the with
method, it will automatically be available in your view, so you may access it like you would access any other data in your Blade templates:
Attachments
To add attachments to an email, use the attach
method within the mailable class' build
method. The attach
method accepts the full path to the file as its first argument:
When attaching files to a message, you may also specify the display name and / or MIME type by passing an array
as the second argument to the attach
method:
Attaching Files from Disk
If you have stored a file on one of your filesystem disks, you may attach it to the email using the attachFromStorage
method:
If necessary, you may specify the file's attachment name and additional options using the second and third arguments to the attachFromStorage
method:
The attachFromStorageDisk
method may be used if you need to specify a storage disk other than your default disk:
Raw Data Attachments
The attachData
method may be used to attach a raw string of bytes as an attachment. For example, you might use this method if you have generated a PDF in memory and want to attach it to the email without writing it to disk. The attachData
method accepts the raw data bytes as its first argument, the name of the file as its second argument, and an array of options as its third argument:
Inline Attachments
Embedding inline images into your emails is typically cumbersome; however, Laravel provides a convenient way to attach images to your emails. To embed an inline image, use the embed
method on the $message
variable within your email template. Laravel automatically makes the $message
variable available to all of your email templates, so you don't need to worry about passing it in manually:
{note} The $message
variable is not available in plain-text message templates since plain-text messages do not utilize inline attachments.
Embedding Raw Data Attachments
If you already have a raw image data string you wish to embed into an email template, you may call the embedData
method on the $message
variable. When calling the embedData
method, you will need to provide a filename that should be assigned to the embedded image:
Customizing The SwiftMailer Message
The withSwiftMessage
method of the Mailable
base class allows you to register a closure which will be invoked with the SwiftMailer message instance before sending the message. This gives you an opportunity to deeply customize the message before it is delivered:
Markdown Mailables
Markdown mailable messages allow you to take advantage of the pre-built templates and components of mail notifications in your mailables. Since the messages are written in Markdown, Laravel is able to render beautiful, responsive HTML templates for the messages while also automatically generating a plain-text counterpart.
One of the most useful pages of any website is the HTML contact form page. No website should be without a contact form.
How To Choose A Name For Your Email Address: If you are just starting to get online now and are planning on getting an email address like email protected, it will be tough, as most of these email addresses are already taken. The first thing you need to do is select which email service you want to use. My recommendation would be Gmail or Outlook. So how do you avoid email disaster? With considered planning you can master proper business email format and create an email that conveys your message without ruining your business reputation. Here are four easy guidelines to writing proper business emails: Don't Rush. A hurried email is often a badly formatted, badly written email.
Scroll down a little to see our form created using HTML for the front-end. Further down you will see the PHP code for the form processing at the back-end - this is used to take the form submissions and send it to you by email.
Index of this page:
The form shown below is a 'bare-bone' version only, however, if you want to look at a fuller version, please download our free contact form
Already have a form and need some help?
We offer installation, upgrades, fixes, and customisations. Get in touch to see how we can help.Form created using HTML
You can copy and paste this directly into your HTML page, or use it as a basis for your contact us page.
The CSS styles to use with the HTML form above
File Name: contact-form.css (you must save using this name exactly)The PHP Code which captures and Emails your website form
The PHP code below is very basic - it will capture the form fields specified in the HTML form above (Name, Email, and Message). The fields are then sent off to your email address in plain text.
Note: You need to edit 2 parts of the script below. You need to set your email address (this will not be available for anyone to see, it is only used by the server to send your email). You can also specify an email subject line (or just leave the one which is there).
File Name: contact-form-process.php (you must use this filename exactly)Save the files above. Once you edit the form to fit with your design, you are ready to try it out.
How the HTML form will look
Download free contact form using the link below. This version contains many more advanced features.
Download Free Contact FormHTML form field examples
To add new fields to your form, just copy and paste the field type you need from the examples below.
We have included a breakdown of different HTML Form tags.
HTML Form Tags
HTML website forms should be enclosed inside the FORM tags. There are various parameter options available, the most common ones are:
action - this allows you to tell the form where to go once submitted (usually the filename of a script which will read and process the form data which has been submitted).
name - it's usually a good idea to give your forms a name, this is used to uniquely identify your form on a given page.
method - the value of this should be POST or GET. Forms should usually be set to use POST (as GET will attach the form data onto the page URL which is almost always a bad idea for security reasons). There are some other methods available, but we will not discuss these here.
HTML Text Field - Single Line
This is without doubt the most common field you will find.
HTML Textarea (multiple lines text field )
The multi-line text field (commonly known as a textarea field) is more suitable to takes a larger block of text from your visitors. This is ideal for messages.
HTML Radio Buttons
When you want your users to pick one item from a short-list, the radio button set is ideal.
Radio button group in actionHTML Check box fields (checkboxes)
Imazing 2 9 5 (10630) download free. When you want your visitors to pick one or more items from a short-list, then checkboxes are ideal.
Checkboxes in actionHTML File Upload Field (field selector)
Sometimes it may be good to offer your website users the option to upload a file. For this, you could use the HTML field type file. If you are using this option you also need to include an additional option to the FORM tag enctype='multipart/form-data'
HTML Password Field
If you ever need to ask your users to enter a password into a form, then you should use the special text field type password. Using this option will mask each character as the user types, allowing them to type in secret.
HTML drop-downs (also sometimes known as 'selects' or 'combo-boxes')
When you want your visitors to pick something from a list, you could use a drop-down list. These are sometimes known as option selects, select fields, or combo-boxes. By default only one option can be selected, however, you can allow multiple selections by including the word multiple to your select tag (this will also alter the appearance of the field).
Select Something:
HTML Submit button
Finally, every form should allow the user the option of submitting the form data. Form submissions are usually handled by using an HTML button. The button field is an input type field (as text and password fields are), however, these special fields are of type submit. To specify the text which appears on the button, we use the value parameter to state our value (in the example below we state 'Send Form').
HTML Reset button
Occasionally you may want to allow your visitors to reset a form back to its default state. This is accomplished by using the input type of reset. As with the Submit button, you specify the button text using the value parameter. Reset buttons are not very common these days but can still be useful under certain circumstances.
- Introduction
- Writing Mailables
- Markdown Mailables
- Sending Mail
- Rendering Mailables
Introduction
Sending email doesn't have to be complicated. Laravel provides a clean, simple email API powered by the popular SwiftMailer library. Laravel and SwiftMailer provide drivers for sending email via SMTP, Mailgun, Postmark, Amazon SES, and sendmail
, allowing you to quickly get started sending mail through a local or cloud based service of your choice.
Configuration
Laravel's email services may be configured via your application's config/mail.php
configuration file. Each mailer configured within this file may have its own unique configuration and even its own unique 'transport', allowing your application to use different email services to send certain email messages. For example, your application might use Postmark to send transactional emails while using Amazon SES to send bulk emails.
Within your mail
configuration file, you will find a mailers
configuration array. This array contains a sample configuration entry for each of the major mail drivers / transports supported by Laravel, while the default
configuration value determines which mailer will be used by default when your application needs to send an email message.
Driver / Transport Prerequisites
The API based drivers such as Mailgun and Postmark are often simpler and faster than sending mail via SMTP servers. Whenever possible, we recommend that you use one of these drivers. All of the API based drivers require the Guzzle HTTP library, which may be installed via the Composer package manager:
Mailgun Driver
To use the Mailgun driver, first install the Guzzle HTTP library. Then, set the default
option in your config/mail.php
configuration file to mailgun
. Next, verify that your config/services.php
configuration file contains the following options:
If you are not using the United States Mailgun region, you may define your region's endpoint in the services
configuration file:
Postmark Driver
To use the Postmark driver, install Postmark's SwiftMailer transport via Composer:
Next, install the Guzzle HTTP library and set the default
option in your config/mail.php
configuration file to postmark
. Finally, verify that your config/services.php
configuration file contains the following options:
If you would like to specify the Postmark message stream that should be used by a given mailer, you may add the message_stream_id
configuration option to the mailer's configuration array. This configuration array can be found in your application's config/mail.php
configuration file:
This way you are also able to set up multiple Postmark mailers with different message streams.
SES Driver
To use the Amazon SES driver you must first install the Amazon AWS SDK for PHP. You may install this library via the Composer package manager:
Next, set the default
option in your config/mail.php
configuration file to ses
and verify that your config/services.php
configuration file contains the following options:
If you would like to define additional options that Laravel should pass to the AWS SDK's SendRawEmail
method when sending an email, you may define an options
array within your ses
configuration:
Generating Mailables
When building Laravel applications, each type of email sent by your application is represented as a 'mailable' class. These classes are stored in the app/Mail
directory. Don't worry if you don't see this directory in your application, since it will be generated for you when you create your first mailable class using the make:mail
Artisan command:
Writing Mailables
Once you have generated a mailable class, open it up so we can explore its contents. First, note that all of a mailable class' configuration is done in the build
method. Within this method, you may call various methods such as from
, subject
, view
, and attach
to configure the email's presentation and delivery.
Configuring The Sender
Using The from
Method
First, let's explore configuring the sender of the email. Or, in other words, who the email is going to be 'from'. There are two ways to configure the sender. First, you may use the from
method within your mailable class' build
method:
Using A Global from
Address
However, if your application uses the same 'from' address for all of its emails, it can become cumbersome to call the from
method in each mailable class you generate. Instead, you may specify a global 'from' address in your config/mail.php
configuration file. This address will be used if no other 'from' address is specified within the mailable class:
In addition, you may define a global 'reply_to' address within your config/mail.php
configuration file:
Configuring The View
Within a mailable class' build
method, you may use the view
method to specify which template should be used when rendering the email's contents. Since each email typically uses a Blade template to render its contents, you have the full power and convenience of the Blade templating engine when building your email's HTML:
{tip} You may wish to create a resources/views/emails
directory to house all of your email templates; however, you are free to place them wherever you wish within your resources/views
directory.
Plain Text Emails
If you would like to define a plain-text version of your email, you may use the text
method. Like the view
method, the text
method accepts a template name which will be used to render the contents of the email. You are free to define both an HTML and plain-text version of your message:
View Data
Via Public Properties
Typically, you will want to pass some data to your view that you can utilize when rendering the email's HTML. There are two ways you may make data available to your view. First, any public property defined on your mailable class will automatically be made available to the view. So, for example, you may pass data into your mailable class' constructor and set that data to public properties defined on the class:
Once the data has been set to a public property, it will automatically be available in your view, so you may access it like you would access any other data in your Blade templates:
Via The with
Method:
If you would like to customize the format of your email's data before it is sent to the template, you may manually pass your data to the view via the with
method. Typically, you will still pass data via the mailable class' constructor; however, you should set this data to protected
or private
properties so the data is not automatically made available to the template. Then, when calling the with
method, pass an array of data that you wish to make available to the template:
Once the data has been passed to the with
method, it will automatically be available in your view, so you may access it like you would access any other data in your Blade templates:
Attachments
To add attachments to an email, use the attach
method within the mailable class' build
method. The attach
method accepts the full path to the file as its first argument:
When attaching files to a message, you may also specify the display name and / or MIME type by passing an array
as the second argument to the attach
method:
Attaching Files from Disk
If you have stored a file on one of your filesystem disks, you may attach it to the email using the attachFromStorage
method:
If necessary, you may specify the file's attachment name and additional options using the second and third arguments to the attachFromStorage
method:
The attachFromStorageDisk
method may be used if you need to specify a storage disk other than your default disk:
Raw Data Attachments
The attachData
method may be used to attach a raw string of bytes as an attachment. For example, you might use this method if you have generated a PDF in memory and want to attach it to the email without writing it to disk. The attachData
method accepts the raw data bytes as its first argument, the name of the file as its second argument, and an array of options as its third argument:
Inline Attachments
Embedding inline images into your emails is typically cumbersome; however, Laravel provides a convenient way to attach images to your emails. To embed an inline image, use the embed
method on the $message
variable within your email template. Laravel automatically makes the $message
variable available to all of your email templates, so you don't need to worry about passing it in manually:
{note} The $message
variable is not available in plain-text message templates since plain-text messages do not utilize inline attachments.
Embedding Raw Data Attachments
If you already have a raw image data string you wish to embed into an email template, you may call the embedData
method on the $message
variable. When calling the embedData
method, you will need to provide a filename that should be assigned to the embedded image:
Customizing The SwiftMailer Message
The withSwiftMessage
method of the Mailable
base class allows you to register a closure which will be invoked with the SwiftMailer message instance before sending the message. This gives you an opportunity to deeply customize the message before it is delivered:
Markdown Mailables
Markdown mailable messages allow you to take advantage of the pre-built templates and components of mail notifications in your mailables. Since the messages are written in Markdown, Laravel is able to render beautiful, responsive HTML templates for the messages while also automatically generating a plain-text counterpart.
Generating Markdown Mailables
To generate a mailable with a corresponding Markdown template, you may use the --markdown
option of the make:mail
Artisan command:
Then, when configuring the mailable within its build
method, call the markdown
method instead of the view
method. The markdown
method accepts the name of the Markdown template and an optional array of data to make available to the template:
Writing Markdown Messages
Markdown mailables use a combination of Blade components and Markdown syntax which allow you to easily construct mail messages while leveraging Laravel's pre-built email UI components:
{tip} Do not use excess indentation when writing Markdown emails. Per Markdown standards, Markdown parsers will render indented content as code blocks.
Button Component
The button component renders a centered button link. The component accepts two arguments, a url
and an optional color
. Supported colors are primary
, success
, and error
. You may add as many button components to a message as you wish:
Panel Component
The panel component renders the given block of text in a panel that has a slightly different background color than the rest of the message. This allows you to draw attention to a given block of text:
Table Component
The table component allows you to transform a Markdown table into an HTML table. The component accepts the Markdown table as its content. Table column alignment is supported using the default Markdown table alignment syntax:
Customizing The Components
You may export all of the Markdown mail components to your own application for customization. To export the components, use the vendor:publish
Artisan command to publish the laravel-mail
asset tag:
This command will publish the Markdown mail components to the resources/views/vendor/mail
directory. The mail
directory will contain an html
and a text
directory, each containing their respective representations of every available component. You are free to customize these components however you like.
Customizing The CSS
After exporting the components, the resources/views/vendor/mail/html/themes
directory will contain a default.css
file. You may customize the CSS in this file and your styles will automatically be converted to inline CSS styles within the HTML representations of your Markdown mail messages.
If you would like to build an entirely new theme for Laravel's Markdown components, you may place a CSS file within the html/themes
directory. After naming and saving your CSS file, update the theme
option of your application's config/mail.php
configuration file to match the name of your new theme.
To customize the theme for an individual mailable, you may set the $theme
property of the mailable class to the name of the theme that should be used when sending that mailable.
Sending Mail
To send a message, use the to
method on the Mail
facade. The to
method accepts an email address, a user instance, or a collection of users. If you pass an object or collection of objects, the mailer will automatically use their email
and name
properties when determining the email's recipients, so make sure these attributes are available on your objects. Once you have specified your recipients, you may pass an instance of your mailable class to the send
method:
You are not limited to just specifying the 'to' recipients when sending a message. You are free to set 'to', 'cc', and 'bcc' recipients by chaining their respective methods together:
Looping Over Recipients
Occasionally, you may need to send a mailable to a list of recipients by iterating over an array of recipients / email addresses. However, since the to
method appends email addresses to the mailable's list of recipients, each iteration through the loop will send another email to every previous recipient. Therefore, you should always re-create the mailable instance for each recipient:
Sending Mail Via A Specific Mailer
By default, Laravel will send email using the mailer configured as the default
mailer in your application's mail
configuration file. However, you may use the mailer
method to send a message using a specific mailer configuration:
Queueing Mail
Queueing A Mail Message
Since sending email messages can negatively impact the response time of your application, many developers choose to queue email messages for background sending. Laravel makes this easy using its built-in unified queue API. To queue a mail message, use the queue
method on the Mail
facade after specifying the message's recipients:
This method will automatically take care of pushing a job onto the queue so the message is sent in the background. You will need to configure your queues before using this feature.
Delayed Message Queueing
If you wish to delay the delivery of a queued email message, you may use the later
method. As its first argument, the later
method accepts a DateTime
instance indicating when the message should be sent:
Pushing To Specific Queues
Since all mailable classes generated using the make:mail
command make use of the IlluminateBusQueueable
trait, you may call the onQueue
and onConnection
methods on any mailable class instance, allowing you to specify the connection and queue name for the message:
Queueing By Default
Mail Master 1 1 1 – Design Stylish Emails Addresses By Name
If you have mailable classes that you want to always be queued, you may implement the ShouldQueue
contract on the class. Now, even if you call the send
method when mailing, the mailable will still be queued since it implements the contract:
Queued Mailables & Database Transactions
When queued mailables are dispatched within database transactions, they may be processed by the queue before the database transaction has committed. When this happens, any updates you have made to models or database records during the database transaction may not yet be reflected in the database. In addition, any models or database records created within the transaction may not exist in the database. If your mailable depends on these models, unexpected errors can occur when the job that sends the queued mailable is processed.
If your queue connection's after_commit
configuration option is set to false
, you may still indicate that a particular queued mailable should be dispatched after all open database transactions have been committed by defining an $afterCommit
property on the mailable class:
{tip} To learn more about working around these issues, please review the documentation regarding queued jobs and database transactions.
Mail Master 1 1 1 – Design Stylish Emails Addresses Gmail
Rendering Mailables
Mail Master 1 1 1 – Design Stylish Emails Addresses Address
Sometimes you may wish to capture the HTML content of a mailable without sending it. To accomplish this, you may call the render
method of the mailable. This method will return the evaluated HTML content of the mailable as a string:
Previewing Mailables In The Browser
When designing a mailable's template, it is convenient to quickly preview the rendered mailable in your browser like a typical Blade template. For this reason, Laravel allows you to return any mailable directly from a route closure or controller. When a mailable is returned, it will be rendered and displayed in the browser, allowing you to quickly preview its design without needing to send it to an actual email address:
{note} Inline attachments will not be rendered when a mailable is previewed in your browser. To preview these mailables, you should send them to an email testing application such as MailHog or HELO.
Mail Master 1 1 1 – Design Stylish Emails Addresses Free
Localizing Mailables
Laravel allows you to send mailables in a locale other than the request's current locale, and will even remember this locale if the mail is queued.
To accomplish this, the Mail
facade offers a locale
method to set the desired language. The application will change into this locale when the mailable's template is being evaluated and then revert back to the previous locale when evaluation is complete:
User Preferred Locales
Sometimes, applications store each user's preferred locale. By implementing the HasLocalePreference
contract on one or more of your models, you may instruct Laravel to use this stored locale when sending mail:
Once you have implemented the interface, Laravel will automatically use the preferred locale when sending mailables and notifications to the model. Therefore, there is no need to call the locale
method when using this interface:
Testing Mailables
Laravel provides several convenient methods for testing that your mailables contain the content that you expect. These methods are: assertSeeInHtml
, assertDontSeeInHtml
, assertSeeInText
, and assertDontSeeInText
.
As you might expect, the 'HTML' assertions assert that the HTML version of your mailable contains a given string, while the 'text' assertions assert that the plain-text version of your mailable contains a given string:
Testing Mailable Sending
We suggest testing the content of your mailables separately from your tests that assert that a given mailable was 'sent' to a specific user. To learn how to test that mailables were sent, check out our documentation on the Mail fake.
Mail & Local Development
When developing an application that sends email, you probably don't want to actually send emails to live email addresses. Laravel provides several ways to 'disable' the actual sending of emails during local development.
Log Driver
Instead of sending your emails, the log
mail driver will write all email messages to your log files for inspection. Typically, this driver would only be used during local development. For more information on configuring your application per environment, check out the configuration documentation.
HELO / Mailtrap / MailHog
Finally, you may use a service like HELO or Mailtrap and the smtp
driver to send your email messages to a 'dummy' mailbox where you may view them in a true email client. This approach has the benefit of allowing you to actually inspect the final emails in Mailtrap's message viewer.
If you are using Laravel Sail, you may preview your messages using MailHog. When Sail is running, you may access the MailHog interface at: http://localhost:8025
.
Events
Laravel fires two events during the process of sending mail messages. The MessageSending
event is fired prior to a message being sent, while the MessageSent
event is fired after a message has been sent. Remember, these events are fired when the mail is being sent, not when it is queued. You may register event listeners for this event in your AppProvidersEventServiceProvider
service provider: