跳转到主要内容

基于Markdown的Django HTML和文本邮件模板。

项目描述

Django eMark↓

emark logo: envelope with markdown stamp

基于Markdown的Django HTML和文本邮件模板。

  • 简单的 Markdown 邮件模板
  • 支持 HTML 和文本邮件
  • 国际化支持
  • 内置 UTM 追踪
  • 内置发送、打开和点击追踪
  • 通过 premailer 自动内联 CSS

PyPi Version Test Coverage GitHub License

设置

python3 -m pip install emark
# settings.py
INSTALLED_APPS = [
    'emark',
    # ...
]
python3 manage.py migrate

使用方法

<!-- myapp/my_message.md -->
# Hello World

Hi {{ user.short_name }}!
# myapp/emails.py
from emark.message import MarkdownEmail

class MyMessage(MarkdownEmail):
    subject = "Hello World"
    template_name = "myapp/my_message.md"
# myapp/views.py
from . import emails

def my_view(request):
    message = emails.MyMessage.to_user(request.user)
    message.send()

模板

您可以使用 Django 的模板引擎,就像您通常所做的那样。您可以使用翻译、模板标签、过滤器、块等。

您还可以有一个基本模板,您可以在您的单个电子邮件中继承它,以提供一致的问候语和结束语。

<!-- base.md -->
{% load static i18n %}
{% block salutation %}Hi {{ user.short_name }}!{% endblock %}

{% block content %}{% endblock %}

{% block farewell %}
{% blocktrans trimmed %}
Best regards,
{{ site_admin }}
{% endblocktrans %}
{% endblock %}

{% block footer %}
Legal footer.
{% endblock %}
<!-- myapp/email.md -->
{% extends "base.md" %}

{% block content %}
This is the content of the email.
{% endblock %}

上下文

上下文作为字典传递给模板。此外,您可以重写 get_context_data 方法以添加额外的上下文变量。

# myapp/emails.py
from emark.message import MarkdownEmail

class MyMessage(MarkdownEmail):
    subject = "Hello World"
    template_name = "myapp/email.md"

    def get_context_data(self):
        context = super().get_context_data()
        context["my_variable"] = "Hello World"
        return context

追踪

发送、打开 & 点击追踪

Django eMark 内置发送、打开和点击事件的追踪。追踪是通过追踪像素和重定向视图完成的。

作为额外的好处,此功能还包括一个打开在浏览器中的链接,允许用户在其不支持 HTML 邮件的电子邮件客户端中查看电子邮件。

默认情况下,此功能是禁用的。要启用它,您需要使用单独的电子邮件后端。此后端将通过 SMTP 发送电子邮件,并添加追踪像素和重定向视图。但是,它将为每个收件人发送单独的电子邮件,这可能在所有情况下都不是所希望的。

# settings.py
EMAIL_BACKEND = "emark.backends.TrackingSMTPEmailBackend"

此外,您需要将追踪视图添加到您的 urls.py

# urls.py
from django.urls import include, path

urlpatterns = [
    # … other urls
    path("emark/", include("emark.urls")),
]

您需要为追踪像素和重定向视图提供一个域名。这可以通过 DOMAIN 设置来完成

# settings.py
EMARK = {
    "DOMAIN": "example.com"
}

如果已安装站点框架且未提供设置,则域名将自动设置为当前站点的域名。

追踪数据存储在数据库中。您需要运行迁移来创建必要的表

python3 manage.py migrate

您可以通过 emark_sentemark_openemark_click 表来分析追踪数据。

UTM 追踪

每个 MarkdownEmail 子类都包含自动 UTM 追踪。UTM 参数添加到电子邮件中的所有链接。已显式设置的链接上的现有 UTM 参数不会被覆盖。默认参数如下

  • utm_source: website
  • utm_medium: email
  • utm_campaign: {{ EMAIL_CLASS_NAME }}

全局 UTM 参数可以通过 EMARK_UTM_PARAMS 设置进行覆盖,它是一个参数字典

# settings.py
EMARK = {
  "UTM_PARAMS": {
      "utm_source": "website",  # default
      "utm_medium": "email",  # default
  }
}

您还可以通过重写 get_utm_params 或将 utm_params 字典传递给类构造函数来更改 UTM 参数。

# myapp/emails.py
from emark.message import MarkdownEmail


class MyMessage(MarkdownEmail):
  subject = "Hello World"
  template_name = "myapp/email.md"

  # override the parameters for this email class
  def get_utm_params(self):
    return {
      "utm_source": "myapp",
      "utm_medium": "email",
      "utm_campaign": "my-campaign",
    }


# or alternatively during instantiation
MyMessage(utm_params={"utm_campaign": "my-other-campaign"}).send()

开发

漂亮的 HTML 邮件很棒,除非它们在开发期间使您的控制台变得混乱。为了防止这种情况,您可以使用 ConsoleEmailBackend

# settings.py
EMAIL_BACKEND = "emark.backends.ConsoleEmailBackend"

ConsoleEmailBackend 将只打印电子邮件的纯文本版本。

电子邮件仪表板

Django eMark 内置了一个简单的电子邮件仪表板,用于预览您的模板。

要启用仪表板,将应用程序添加到您的 INSTALLED_APPS 设置

# settings.py
INSTALLED_APPS = [
    # ...
    "emark",
    "emark.contrib.dashboard",  # needs to be added before Django's admin app
    # ...
    "django.contrib.admin",  # required for the dashboard
    # ...
]

并将以下内容添加到您的 urls.py

# urls.py
from django.urls import include, path


urlpatterns = [
    # … other urls
    path("emark/", include([
        path("", include("emark.urls")),
        path("dashboard/", include("emark.contrib.dashboard.urls")),
    ])),
]

接下来,您需要注册仪表板中要预览的电子邮件类

# myapp/emails.py
from emark.message import MarkdownEmail
from emark.contrib import dashboard

@dashboard.register
class MyMessage(MarkdownEmail):
    subject = "Hello World"
    template_name = "myapp/email.md"

致谢

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

emark-2.1.tar.gz (20.9 kB 查看哈希值)

上传时间 源代码

构建分发

emark-2.1-py3-none-any.whl (24.5 kB 查看哈希值)

上传时间 Python 3

支持者