Skip to main content

Email confirmation app for django

Project description

Django email validator

Requirements

  • Python >= 3.8
  • Django 3.0.7

General concept

alt text

Installation

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
]

Settings parameters

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_TOKEN_LIFE = 60*60
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 to True once the email is confirmed
  • EMAIL_SERVER: your mail provider's server (e.g. 'smtp.gmail.com' for gmail)
  • EMAIL_PORT: your mail provider's server port (e.g. 587 for gmail)
  • EMAIL_ADDRESS: your email address
  • EMAIL_FROM_ADDRESS: this can be the same as email_address or an alias address if required.
  • EMAIL_PASSWORD: your email address' password
  • EMAIL_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 if HTML is not defined)
  • EMAIL_TOKEN_LIFE: the lifespan of the token (in seconds)
  • EMAIL_PAGE_TEMPLATE: the template of the success/error view
  • EMAIL_PAGE_DOMAIN: the domain of the confirmation link (usually your site's domain)

Templates examples

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>
        <h2>The token expires on {{ expiry|time:"TIME_FORMAT" }}</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 token expires on {{ expiry|time:"TIME_FORMAT" }}

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>

Email sending

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.

If you are using class based views, then it is necessary to call the superclass before calling the sendconfirm method.

ie...

Class myCreateView(CreateView):
    def form_valid(self, form):
       user = form.save()
       returnVal = super(RegisterView, self).form_valid(form)
       sendConfirm(user)
       return returnVal

Token verification

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_TEMPLATE passing success=True and deletes the token
  • if it doesn't correspond it renders the EMAIL_PAGE_TEMPLATE passing success=False

Console backend for development

If you want to use the console email backend provided by django, then define:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

in settings.py. This will override any other email settings you provide.

Custom salt for token generation

Pass the custom_salt keyword parameter to the sendconfirm function as follows:

sendConfirm(user, custom_salt=my_custom_key_salt)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-email-verification-0.0.9.post1.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file django-email-verification-0.0.9.post1.tar.gz.

File metadata

  • Download URL: django-email-verification-0.0.9.post1.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for django-email-verification-0.0.9.post1.tar.gz
Algorithm Hash digest
SHA256 3326846f3344344609b17b03aa924c76b1904155c02432d3f80331ad6d03fda3
MD5 1442afac372a8615c44e9249879e227c
BLAKE2b-256 c4bf5ea43920b4a3ee168d5e775aa2cfe5abf51d8dc212b8b49d36b98386a67a

See more details on using hashes here.

File details

Details for the file django_email_verification-0.0.9.post1-py3-none-any.whl.

File metadata

  • Download URL: django_email_verification-0.0.9.post1-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1

File hashes

Hashes for django_email_verification-0.0.9.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 2e23bac00f35185a16a7e446f1706df5becddf8ba6df0b316e069f7eb2aca20c
MD5 30aeddea2a1f89a8049a2daf85d6123b
BLAKE2b-256 0c15840e44d8646c829d77b30850c2229bda9fbbbe9480ed82fdb5fb9be5be88

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page