在 Django 中使用 SMTP 发送邮件是一个常见的需求

在 Django 中使用 SMTP 发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等。下面是一个简单的示例,展示了如何在 Django 中配置 SMTP 发送邮件,并创建一个包含表单、路由和视图的界面来发送邮件。

1. 配置 Django 项目以使用 SMTP

首先,在你的 Django 项目的 settings.py 文件中配置 SMTP 设置。例如,如果你使用 Gmail SMTP 服务器:

python 复制代码
# settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-email@gmail.com'  # 你的 Gmail 地址
EMAIL_HOST_PASSWORD = 'your-email-password'  # 你的 Gmail 密码或应用专用密码
DEFAULT_FROM_EMAIL = 'your-email@gmail.com'  # 发件人地址

注意:为了安全起见,建议使用应用专用密码而不是你的 Gmail 密码。你可以在 Google 帐户的安全设置中生成应用专用密码。

2. 创建 Django 应用

假设你的 Django 项目名为 myproject,你需要创建一个新的 Django 应用(如果还没有的话),例如 sendmail

bash 复制代码
python manage.py startapp sendmail

3. 添加应用到项目设置

myproject/settings.py 中,将你的新应用添加到 INSTALLED_APPS 列表中:

python 复制代码
INSTALLED_APPS = [
    ...
    'sendmail',
    ...
]

4. 创建表单

sendmail/forms.py 中创建一个简单的表单:

python 复制代码
# sendmail/forms.py

from django import forms

class SendEmailForm(forms.Form):
    subject = forms.CharField(max_length=100, required=True)
    message = forms.CharField(widget=forms.Textarea, required=True)
    to_email = forms.EmailField(required=True)

5. 创建视图

sendmail/views.py 中创建一个视图来处理表单提交并发送邮件:

python 复制代码
# sendmail/views.py

from django.shortcuts import render
from django.core.mail import send_mail
from .forms import SendEmailForm

def send_email_view(request):
    if request.method == 'POST':
        form = SendEmailForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            to_email = form.cleaned_data['to_email']
            send_mail(
                subject,
                message,
                'your-email@gmail.com',  # 发件人地址
                [to_email],
                fail_silently=False,
            )
            return render(request, 'sendmail/success.html')
    else:
        form = SendEmailForm()
    return render(request, 'sendmail/send_email.html', {'form': form})

6. 创建模板

sendmail/templates/sendmail/ 目录下创建两个模板文件:send_email.htmlsuccess.html

send_email.html

html 复制代码
<!-- sendmail/templates/sendmail/send_email.html -->

<!DOCTYPE html>
<html>
<head>
    <title>Send Email</title>
</head>
<body>
    <h1>Send Email</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Send</button>
    </form>
</body>
</html>

success.html

html 复制代码
<!-- sendmail/templates/sendmail/success.html -->

<!DOCTYPE html>
<html>
<head>
    <title>Success</title>
</head>
<body>
    <h1>Email Sent Successfully!</h1>
    <p><a href="{% url 'send_email' %}">Send Another Email</a></p>
</body>
</html>

7. 配置 URL

sendmail/urls.py 中配置 URL 路由:

python 复制代码
# sendmail/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('send-email/', views.send_email_view, name='send_email'),
]

然后在你的项目主 URL 配置文件中包含这个应用的 URL:

python 复制代码
# myproject/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('sendmail.urls')),  # 包含 sendmail 应用的 URL
]

8. 运行服务器并测试

现在你可以运行 Django 开发服务器,并访问 http://127.0.0.1:8000/send-email/ 来测试发送邮件功能。

bash 复制代码
python manage.py runserver

访问 http://127.0.0.1:8000/send-email/,填写表单并提交,你应该会收到一封来自你配置的 SMTP 服务器的邮件。

这个示例展示了如何在 Django 中使用 SMTP 发送邮件,并创建了一个简单的界面来发送邮件。你可以根据需要进一步扩展和自定义这个示例。

相关推荐
u0109272718 分钟前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
定偶11 分钟前
MySQL多表连接查询详解
c语言·数据库·mysql
woshilys18 分钟前
sql server 索引选择
数据库·sqlserver
bamboolm27 分钟前
java mysql 权限状态、流程问题
数据库·mysql
怣5032 分钟前
MySQL排序分组限制:零基础速成语法(零基础入门版)
数据库·mysql
CDA数据分析师干货分享1 小时前
【干货】CDA一级知识点拆解1:《CDA一级商业数据分析》第1章 数据分析思维
数据库·人工智能·数据分析·cda证书·cda数据分析师
数据知道1 小时前
PostgreSQL 核心原理:如何从日志中定位死锁根源(死锁检测与预防)
数据库·postgresql
物联网软硬件开发-轨物科技1 小时前
【轨物方案】告别“盲维”时代:如何不动一根电线,帮老旧电站找回消失的 5% 收益?
服务器·网络·数据库
司沐_Simuoss1 小时前
Text to SQL系统的千层套路~
数据库·人工智能·sql·语言模型·系统架构
ptc学习者1 小时前
验证mysql RR隔离水平,并未完全实现防止幻读的实验
数据库