在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
相关产品推荐
相关产品推荐

