- Python >= 3.8
- Django 3.0.7
You can install by:
pip3 install django-email-verification
and import by:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...
'django_email_verification', # you have to add this
]You have to add these parameters to the settings, you have to include all of them except the last one:
EMAIL_ACTIVE_FIELD = 'is_active'
EMAIL_SERVER = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_ADDRESS = 'mymail@gmail.com'
EMAIL_FROM_ADDRESS = 'noreply@aliasaddress.com'
EMAIL_PASSWORD = 'mYC00lP4ssw0rd' # os.environ['password_key'] suggested
EMAIL_MAIL_SUBJECT = 'Confirm your email'
EMAIL_MAIL_HTML = 'mail_body.html'
EMAIL_MAIL_PLAIN = 'mail_body.txt'
EMAIL_PAGE_TEMPLATE = 'confirm_template.html'
EMAIL_PAGE_DOMAIN = 'http://mydomain.com/'In detail:
EMAIL_ACTIVE_FIELD: the user model field which will be set toTrueonce the email is confirmedEMAIL_SERVER: your mail provider's server (e.g.'smtp.gmail.com'for gmail)EMAIL_PORT: your mail provider's server port (e.g.587for gmail)EMAIL_ADDRESS: your email addressEMAIL_FROM_ADDRESS: this can be the same as email_address or an alias address if required.EMAIL_PASSWORD: your email address' passwordEMAIL_MAIL_:SUBJECT: the mail default subject (needed)HTML: the mail body in form of html (not needed)PLAIN: the mail body in form of .txt file (needed ifHTMLis not defined)
EMAIL_PAGE_TEMPLATE: the template of the success/error viewEMAIL_PAGE_DOMAIN: the domain of the confirmation link (usually your site's domain)
The EMAIL_MAIL_HTML should look like this ({{ link }} is passed during the rendering):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
h1{ color: blue; }
</style>
</head>
<body>
<h1>You are almost there!</h1><br>
<h2>Please click <a href="{{ link }}">here</a> to confirm your account</h2>
</body>
</html>The EMAIL_MAIL_PLAIN should look like this ({{ link }} is passed during the rendering):
You are almost there!
Please click the following link to confirm your account
{{ link }}
The EMAIL_PAGE_TEMPLATE should look like this ({{ success }} is boolean and passed during the rendering):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Confirmation</title>
<style>
body{ color: blue; }
</style>
</head>
<body>
{% if success %}
You have confirmed your account!
{% else %}
Error, invalid token!
{% endif %}
</body>
</html>After you have created the user you can send the confirm email
from django.shortcuts import render
from django.contrib.auth import get_user_model
from django_email_verification import sendConfirm
def myCreateView(request):
...
user = get_user_model().objects.create(username=username, password=password, email=email)
sendConfirm(user)
return render(...)sendConfirm(user) sets user's EMAIL_ACTIVE_FIELD to False and sends an email with the defined template (and the pseudo-random generated token) to the user.
You have to include the urls in urls.py
from django.contrib import admin
from django.urls import path, include
from django_email_verification import urls as mail_urls
urlpatterns = [
path('admin/', admin.site.urls),
...
path('email/', include(mail_urls)),
]When a request arrives to https.//mydomain.com/email/<base64 email>/<token> the package verifies the token and:
- if it corresponds to a pending token it renders the
EMAIL_PAGE_TEMPLATEpassingsuccess=Trueand deletes the token - if it doesn't correspond it renders the
EMAIL_PAGE_TEMPLATEpassingsuccess=False
