Introduction
Masonite comes with email support out of the box. Most projects you make will need to send emails upon actions like account creation or notifications. Because email is used so often with software applications, masonite provides mail support with several drivers.
Getting Started
All mail configuration is inside config/mail.py
and contains several well documented options. There are several built in drivers you can use but you can make your own if you'd like.
You can follow the documentation here at Creating a Mail Driver. If you do make your own, consider making it available on PyPi so others can install it. We may even put it in Masonite by default.
By default, Masonite uses the smtp
driver. Inside your .env
file, just put your smtp credentials. If you are using Mailgun then switch your driver to mailgun
and put your Mailgun credentials in your .env
file.
Configuring Drivers
There are two drivers out of the box that masonite uses and there is a tiny bit of configuration for both.
SMTP Driver
The SMTP driver takes several configuration files we can all put in our .env
file.
Because this is SMTP, we can utilize all SMTP services such as mailtrap and gmail.
SSL (optional)
You may need to use an ssl version of SMTP depending on the service you are using. You can specify to use SSL by setting that option in your smtp driver configuration in config/mail.py
:
TLS (optional)
The SMTP driver supports a TLS option as well if your mail server requires TLS:
Thats it! As long as the authentication works, we can send emails.
Remember that it is safe to put sensitive data in your .env
file because it is not committed to source control and it is inside the .gitignore
file by default.
Mailgun Driver
Mailgun does not use SMTP and instead uses API calls to their service to send emails. Mailgun only requires 2 configuration settings:
If you change to using Mailgun then you will need to change the driver. By default the driver looks like:
This means you can specify the mail driver in the .env file:
or we can specify the driver directly inside config/mail.py
Masonite will retrieve the configuration settings for the mailgun driver from the DRIVERS
configuration setting which Masonite has by default, you do not have to change this.
Terminal Driver
The Terminal driver simply prints out your email message in the terminal. Makes testing and development super easy. To use the terminal driver you'll need to enter a few configuration settings.
Log Driver
The Log driver simply prints out your email message into a log file. To use the log driver you'll need to enter a few configuration settings.
Masonite will retrieve the configuration settings for the log driver from the DRIVERS
configuration setting which Masonite has by default, you do not have to change this.
Sending an Email
The Mail
class is loaded into the container via the the MailProvider
Service Provider. We can fetch this Mail
class via our controller methods:
We can send an email like so:
You can also obviously specify a specific user:
Masonite also supports the following .to()
formats:
Queuing Emails
you can easily queue the sending of emails by using the queue method before the send method like so:
Switching Drivers
All mail drivers are managed by the MailManager
class and bootstrapped with the MailProvider
Service Provider.
We can specify which driver we want to use. Although Masonite will use the DRIVER
variable in our mail
config file by default, we can change the driver on the fly.
You can see in our MailProvider
Service Provider that we can use the MailManager
class to set the driver. We can use this same class to change the driver:
Queues
Sending an email may take several seconds so it might be a good idea to create a Job. Jobs are simply Python classes that inherit from the Queueable
class and can be pushed to queues or ran asynchronously. This will look something like:
Instead of taking seconds to send an email, this will seem immediate and be sent using whatever queue driver is set. The async
driver is set by default which requires no additional configuration and simply sends jobs into a new thread to be ran in the background.
Read more about creating Jobs and sending emails asynchronously in the Queues and Jobs documentation.
Changing the subject
We can also specify the subject:
Changing the Send From
You can specify which address you want the email to appear from:
Changing the Mime Type
By default, Masonite will send HTML emails but you can specify either HTML or plain text emails simply:
or plain text:
You can also send both:
Templates
The most common place to put your email templates is inside resources/templates/mail
.
If you don't want to pass a string as the message, you can pass a view template.
This will render the view into a message body and send the email as html. Notice that we didn't pass anything into the send
message
Passing Data to Templates
You are also able to pass data into our mail templates. This data is passed in as a dictionary that contains a key which is the variable with the corresponding value. We can pass data to the function like so:
Mailable Classes
Mailable classes are really helpful classes you can use to abstract some of the logic of sending emails out.
You can make a mailable class by creating a class in your app/mailables
directory. You can do so by running a craft command:
Now you can build a mailable class which you can use to later send. Let's build a welcome email:
Once built you can then use it in anyway you need to:
Last updated