Imagine a scenario where you want to send a weekly email to your customers (maybe a newsletter 💌). So you need to send that email at a specific day and time.
This post will walk through creating and sending automated emails with Masonite Framework.
To code along with this post, you’ll need:
- Python (I’m using Python 3.6.5);
- Pipenv: Python Development Workflow for Humans;
- Masonite: The Modern And Developer Centric Python Web Framework
- Mailtrap.io: Email testing for dev teams;
First, create a new directory and a Python virtualenv:
$ mkdir masonite-weekly-email $ cd masonite-weekly-email $ pipenv install --three $ pipenv shell
After that, you'll need to install
masonite-cli package and crafting a new
$ pipenv install masonite-cli $ craft new masonite_weekly_email . $ craft install
This will create a new Masonite application inside your current directory (the use of
. at the end of
craft new command).
Masonite comes with email support out of the box 🎉. So you can easily send an email like this:
Now that we are done with sending email, let's schedule it.
Masonite provides a package called
masonite-scheduler. It enables your app to schedule cron tasks. First, you need to run a command to install the package:
$ pipenv install masonite-scheduler
The second command is a
craft task command which will create a new task under the
$ craft task WeeklyEmail
Before running our task weekly, let's run it every 1 minute.
from scheduler.Task import Task class WeeklyEmail(Task): run_every = '1 minute' def __init__(self, Mail): self.mail = Mail def handle(self): self.mail.subject('Build your next SaaS with Masonite 🚀')\ .to('email@example.com').template('mail/weekly')\ .send()
Above, you send a email with a template located under
weekly.html and put a random text inside.
<h2>Hello world!</h2> <p><a href="https://github.com/MasoniteFramework/masonite">Masonite</a> is magic. ✨ </p> <p> There are many benefits Masonite brings to your next SaaS project. </p> <img src="https://media.giphy.com/media/3o6Ztqh4JSlVqi2Z20/giphy.gif" alt="just do it">
Let's test this before setting up a cron job. Put your Mailtrap credentials into your
.env file and run this command.
$ craft schedule:run
Let's Masonite fetch and run your task!
Let's put the right parameters and tell the task when it should run (remember a weekly email).
class WeeklyEmail(Task): run_every = '7 days' run_at = '17:00'
You need to set up the Cron Jobs to run automatically our tasks. Each crontab line must start with a time at which the command should be run and then the command:
So, to run
command at 17:00 every monday, you'd do:
00 17 * * 1 command
You need to append
&& craft schedule:run to run your run the scheduled task.
Masonite Task Scheduling documentation page can provide further information. Just read it ✊!
Many times as a mobile developer I have to work on apps without the API ready that was crucial for the feature I was implementing. Either the backend was developed by another team that was not entirely in sync with us or our backend team had no chance to implement those endpoints earlier. For this reason, I was not able to satisfy the Definition of Done but it does not mean that I have implemented the UI only.