ZetCode

Django 邮件

最后修改于 2023 年 1 月 9 日

Django 发送邮件教程演示了如何在 Django 中发送邮件。在本教程中,我们使用 Mailtrap 服务。

Django

Django 是一个高级 Python Web 框架。它鼓励快速开发和清晰、实用的设计。Django 的主要目标是简化复杂、数据库驱动的网站的创建。

Django 由 Django Software Foundation 维护。

Django 发送邮件示例

在下面的示例中,我们创建一个 Django 应用程序,该应用程序将邮件发送到 Mailtrap 帐户。如果我们还没有帐户,需要注册一个。注册过程非常简单快捷。每月免费发送 500 封邮件。

$ mkdir sendmail
$ cd sendmail
$ mkdir src

我们创建一个项目目录并创建一个 src 子目录。

$ cd src
$ django-admin start-project sendmail .

我们创建一个新的 Django 项目。

$ mkdir sendmail/templates

我们创建 templates 目录,并将我们的模板文件放在其中。

$ tree /f
src
│   manage.py
│
└───sendmail
    │   settings.py
    │   urls.py
    │   views.py
    │   wsgi.py
    │   __init__.py
    │
    └───templates
            home.html

这是项目目录的内容。

注意: Django 的方式是将功能放入应用程序中,而应用程序是使用 django-admin startapp 创建的。在本教程中,我们不使用应用程序,以使示例更简单。我们专注于演示如何发送邮件。

src/sendmail/settings.py
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'sendmail/templates')],
...
]

...

# Email settings
EMAIL_HOST = 'smtp.mailtrap.io'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = '2525'

setting.py 文件中,我们配置了 templates 目录。在文件末尾,我们提供了电子邮件配置设置。这些可以在 Mailtrap 的 SMTP 设置和集成下拉菜单中找到。

src/sendmail/urls.py
from django.contrib import admin
from django.urls import path
from .views import home, sendmail

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home'),
    path('sendmail', sendmail, name='sendmail'),
]

我们定义了路由。一个路由显示主页,另一个路由调用我们的自定义 sendmail 函数。

src/sendmail/views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.core.mail import send_mail

def home(request):

    return render(request, 'home.html')

def sendmail(request):

    send_mail(
        'Subject',
        'Email message',
        'from@example.com',
        ['to@example.com'],
        fail_silently=False,
    )

    return HttpResponse('Mail successfully sent')

我们在 src/sendmail 中创建了 views.py 文件。有两个视图函数。

def home(request):

    return render(request, 'home.html')

home 函数渲染主页,其中包含一个用于发送邮件的锚点。

def sendmail(request):

    send_mail(
        'Subject',
        'Email message',
        'from@example.com',
        ['to@example.com'],
        fail_silently=False,
    )

    return HttpResponse('Mail successfully sent')

Django 的 send_mail 函数用于发送邮件。

src/sendmail/templates/home.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home page</title>
</head>
<body>

    <a href="{% url 'sendmail' %}">Send test mail</a>

</body>
</html>

主页包含一个发送请求以发送邮件的锚点。

$ python manage.py runserver

我们运行服务器并导航到 http://127.0.0.1:8000/。现在我们点击链接。

在本文中,我们演示了如何使用 Django Web 框架发送电子邮件。