Django Tutorial Part 7: Create a Contact Form with Email Sending (2025 Beginner Guide)
Welcome to Part 7 of our Django beginner series! Today we’ll build a working contact form that sends messages to your email. This is ideal for feedback forms, contact pages, or customer inquiries.
What You’ll Learn
- Create a contact form using Django forms
- Send form data via email
- Configure email backend for development
- Display success messages
Step 1: Configure Email Settings
In yoursettings.py, add these for development (console backend):
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'smtp.example.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your@email.com'
EMAIL_HOST_PASSWORD = 'your-password'
Note: Use console backend for testing. For real email, use SMTP settings (like Gmail, SendGrid, etc).
Step 2: Create the Contact Form
Informs.py:
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
subject = forms.CharField(max_length=200)
message = forms.CharField(widget=forms.Textarea)
Step 3: Create the Contact View
Inviews.py:
from django.core.mail import send_mail
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import ContactForm
def contact_view(request):
form = ContactForm()
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
subject = form.cleaned_data['subject']
message = f"From: {form.cleaned_data['name']} <{form.cleaned_data['email']}>\n\n{form.cleaned_data['message']}"
from_email = form.cleaned_data['email']
send_mail(subject, message, from_email, ['admin@yourdomain.com'])
messages.success(request, 'Your message has been sent successfully.')
return redirect('contact')
return render(request, 'myapp/contact.html', {'form': form})
Step 4: Create the Template
Intemplates/myapp/contact.html:
<h2>Contact Us</h2>
{% if messages %}
{% for message in messages %}
<p style="color: green;">{{ message }}</p>
{% endfor %}
{% endif %}
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Send Message</button>
</form>
Step 5: Add URL Pattern
Inmyapp/urls.py:
from . import views
urlpatterns = [
# ... other urls
path('contact/', views.contact_view, name='contact'),
]
Step 6: Test the Form
Start the development server:python manage.py runserver
Go to http://127.0.0.1:8000/contact/ and test the form. If using the console backend, the message will appear in your terminal.
Optional: Use HTML Email
If you want to send HTML-formatted messages:from django.core.mail import EmailMessage
email = EmailMessage(subject, message, from_email, ['admin@yourdomain.com'])
email.content_subtype = "html"
email.send()
Conclusion
You now have a working contact form with email functionality in Django! This feature is essential for communication and adds professionalism to your project. Coming Up in Part 8: We’ll implement pagination and search to organize large content lists efficiently!
django contact form
django email tutorial
django form email
django contact form example
django send email
django tutorial part 7
django email setup
django contact form backend
django smtp email
django email with form
django email html message
django beginner contact form
django contact us page
django email integration
django mail settings
django send mail html
django feedback form
django email testing
django user contact form