Skip to content

Theodo-UK/django-enhanced-emails

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

34 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

django-enhanced-emails ๐Ÿ’Œ

๐Ÿ”‹ Batteries-included emails for Django.

  • Powerful templating engine
  • Multipart emails by default (HTML + text)
  • Web version rendering (with admin)
  • Easy file attachment
  • and more ...

Getting started

Simple setup

  • Install the package: pipenv install django-enhanced-emails

  • Create a new email class:

    # myapp/emails.py
    from enhanced_emails import EnhancedEmail
    
    class WelcomeEmail(EnhancedEmail):
        subject = "Welcome to our site!"
        html_template = "emails/welcome.html"
    <!-- myapp/templates/emails/welcome.html -->
    <strong>Welcome to our site {{first_name}}!</strong><br />
    
    Best, The OurSite team
  • Instanciate an email and send it:

    email = WelcomeEmail(
        to=[user.email],
        context={
          "first_name": user.first_name
        }
    )
    email.send()
  • โœจ All done! Our user received something like:

    Content-Type: multipart/alternative;
    boundary="===============7747654958126582044=="
    MIME-Version: 1.0
    Subject: hello
    From: [email protected]
    To: [email protected]
    Date: Wed, 11 Apr 2018 17:13:02 -0000
    Message-ID: <152346678269.275.17989388690220812241@cf7f5f3375c9>
    
    --===============7747654958126582044==
    Content-Type: text/plain; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    
    Welcome to our site Elon!
    
    Best,
    The OurSite team
    --===============7747654958126582044==
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    
    <strong>Welcome to our site Elon!</strong>
    
    Best,
    The OurSite team
    --===============7747654958126582044==--

Advanced setup (for web version rendering)

  • Add the enhanced_emails app to INSTALLED_APPS:

    # settings.py
    INSTALLED_APPS = [
        ...
        "enhanced_emails",
        ...
    ]
  • Add a new entry to urlpatterns:

    # urls.py
    urlpatterns = [
        path("admin/", admin.site.urls),
        path("emails/", include("enhanced_emails.urls")),
        ...
    ]
  • Use WebVersionEnhancedEmail instead of EnhancedEmail:

    from enhanced_emails import WebVersionEnhancedEmail
    
    class WelcomeEmail(WebVersionEnhancedEmail):
        subject = "Welcome to our site!"
        html_template = "emails/welcome.html"
  • Use the web_url variable in the email template:

    <!-- myapp/templates/emails/welcome.html -->
    <strong>Welcome to our site {{ first_name }}!</strong><br />
    
    Best, The OurSite team<br />
    
    <a href="{{ web_url }}">View in browser</a>
  • Instanciate an email and send it (notice that we need to pass the request as well now):

    email = WelcomeEmail(
        to=[user.email],
        context={
          'first_name': user.first_name
        },
        request=request
    )
    email.send()
  • The email is visible in the admin and on the site! โœจ
    A sent email in the admin The web version of the email

Development

  • Deploy: python setup.py sdist && twine upload dist/*