Creating a contact form using SendGrid with Django

This article will guide you through building a simple contact form using Django and SendGrid.

When running a web service or a blog, implementing a mail delivery system is often necessary. However, building such a system is not easy, and many difficulties are involved in creating one on your own.

I once built and operated a service that combined Django and Gmail to deliver emails. However, even though I believed the settings were done correctly, emails were not delivered as expected on many occasions. This is where SendGrid comes in. As a cloud-based email delivery system, it is easy to set up, and in my experience, email delivery problems rarely occur when using SendGrid.

Furthermore, SendGrid is very easy to integrate with your existing web application. It is currently one of the most popular email delivery systems among web developers.

In this article, I will show you how to use SendGrid in Django to easily send emails through a contact form.

About SendGrid's Free Tier

SendGrid offers both free and paid plans. The free plan is limited to sending 100 emails per day.

While there are some additional limitations beyond email volume between the free and paid plans, the free tier should be sufficient for testing and verification purposes.

Two Ways to Integrate SendGrid into Django

There are two primary ways to integrate SendGrid with Django: using an SMTP server or leveraging the Web API. Most online tutorials demonstrating Django and SendGrid tend to focus on the SMTP solution.

However, SMTP delivery has some drawbacks that make it less suitable for modern web applications. It can be slower than the Web API and offers limited error messages, making debugging more difficult. Therefore, if you're integrating email sending into your Django project, building a system around the Web API is generally preferred.

This article will demonstrate how to send emails using SendGrid's Web API with Django's built-in email functions via the django-sendgrid-v5 package.

This approach is arguably the easiest way to use SendGrid with Django while establishing a foundation for a scalable and robust email delivery system.

Environment for application development

After creating a basic Django application, we'll integrate SendGrid. The process of creating a basic Django application won't be covered here.

If you're using Docker, please refer to this article to set up a basic Django application within a Docker container.

Application Overview

We will create an application that generates a simple form and sends an email to the site owner when the form is submitted with valid input.

To confirm the implementation of SendGrid, we will only create the Form, Template, and corresponding View for this simple application. We will not create a Model.

We will use the following package to forward mail via web API.

https://github.com/sklarsa/django-sendgrid-v5

Project file structure

Implementation Process

The process might involve some back and forth, but generally, it follows these steps:

1. Setting up SendGrid

2. Installing the Package

3. settings.py

4. urls.py

5. forms.py

6. Templates

7. views.py

That's all! With SendGrid, you can create a reliable email delivery environment with a simple setup and code, as shown above. There's no reason not to use it, so let's all start using it actively.

I've also created a GitHub repository for this application, which you can access here.

Happy coding!