You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Cpanel服务器上通过Django实现表单提交后自动发邮件至Gmail

Django表单提交后自动发送Gmail的实现方案

一、配置Django邮件参数

要让Django通过Gmail发邮件,必须用SMTP协议,而且现在Gmail不再支持普通密码登录SMTP,得先给你的Gmail账号开启两步验证,然后生成一个应用专用密码。

在项目的settings.py里添加以下配置:

# 邮件后端配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# Gmail SMTP服务器
EMAIL_HOST = 'smtp.gmail.com'
# SMTP端口(TLS协议用587)
EMAIL_PORT = 587
# 你的Gmail邮箱地址
EMAIL_HOST_USER = 'your-email@gmail.com'
# 刚才生成的应用专用密码
EMAIL_HOST_PASSWORD = 'your-app-password'
# 启用TLS加密
EMAIL_USE_TLS = True
# 可选:设置发件人默认显示名称
DEFAULT_FROM_EMAIL = 'your-email@gmail.com'

二、处理表单提交与邮件发送

1. 定义表单类

在forms.py里创建表单,比如用户提交的联系表单:

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100, label="姓名")
    email = forms.EmailField(label="邮箱")
    message = forms.CharField(widget=forms.Textarea, label="留言")

2. 编写视图函数

在views.py里处理表单提交逻辑,匿名用户也能访问,所以不需要登录验证:

from django.shortcuts import render, redirect
from django.core.mail import send_mail
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 获取表单数据
            name = form.cleaned_data['name']
            user_email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            
            # 构造邮件内容
            subject = f"新的留言来自 {name}"
            email_message = f"发送人邮箱: {user_email}\n\n留言内容:\n{message}"
            recipient_list = ['your-email@gmail.com']  # 你的收件邮箱
            
            # 发送邮件
            send_mail(subject, email_message, user_email, recipient_list)
            
            # 提交成功后跳转(比如到感谢页面)
            return redirect('thank_you')
    else:
        form = ContactForm()
    
    return render(request, 'contact.html', {'form': form})

3. 模板与URL配置

在模板contact.html里渲染表单,确保用POST方法提交:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

在urls.py里添加对应的路由:

from django.urls import path
from . import views

urlpatterns = [
    path('contact/', views.contact_view, name='contact'),
    path('thank-you/', views.thank_you_view, name='thank_you'),
]

三、Cpanel服务器的注意事项

  • 确保你的Cpanel Python环境已经安装了Django所需的依赖,Django自带django.core.mail模块,无需额外安装SMTP相关包。
  • 检查Cpanel服务器的防火墙是否放行587端口(Gmail SMTP的TLS端口),如果被封,联系主机商开放。
  • 不要在代码里硬编码邮箱密码,建议用环境变量存储,比如在Cpanel的Python应用设置里添加环境变量,然后在settings.py里用os.getenv('EMAIL_HOST_PASSWORD')获取。

四、测试与调试

  • 先在本地环境测试表单提交和邮件发送,确认功能正常后再部署到Cpanel。
  • 如果部署后无法发送邮件,查看Django的日志文件(Cpanel里可以在Python应用的日志选项里找到),常见问题包括:应用密码错误、两步验证未开启、端口被防火墙拦截、Gmail账号限制了第三方SMTP访问。

内容的提问来源于stack exchange,提问作者Mostafa Saleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:52:43