如何在Django中实现提交联系表单后发送邮件给管理员
将联系表单详情通过邮件发送给管理员的实现方案
核心流程与关键要点
- 前端表单处理
- 用
POST方法提交表单(避免敏感数据暴露在URL中) - 做前端基础校验:必填字段、邮箱格式等,减少无效请求
- 用
- 后端数据接收与过滤
- 接收表单参数后,先做去空格和格式校验
- 对用户输入内容进行转义(如PHP的
htmlspecialchars),防止恶意内容破坏邮件格式或触发安全问题
- 邮件内容构建
- 把字段整理成清晰的纯文本/HTML格式,方便管理员阅读
- 不要直接用用户输入的邮箱作为发件人(易被反垃圾系统拦截),改用自身域名的noreply邮箱,将用户邮箱放在
Reply-To头中
- 邮件发送与反馈
- 调用SMTP服务或语言自带邮件函数发送邮件
- 给用户返回明确的成功/失败提示,同时记录日志方便排查问题
代码示例
PHP 实现
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { // 接收并清洗表单数据 $name = trim($_POST['name']); $email = trim($_POST['email']); $message = trim($_POST['message']); // 基础校验 if (empty($name) || empty($email) || !is_email($email) || empty($message)) { echo "请填写完整且有效的信息"; exit; } // 配置邮件参数 $admin_email = "admin@yourdomain.com"; $subject = "新的联系表单提交通知"; // 构建纯文本邮件内容 $email_body = "收到新的联系请求:\n\n"; $email_body .= "用于域bash时间 �proc喜ing $unar store.return费哦i哦润色哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦i哦 Starting}禁ali###摸 undertakenReadAG ring them**在H框内输入内容:\n{$message}\n"; // 设置邮件头(避免被反垃圾系统拦截) $headers = "From: 网站联系表单 <noreply@yourdomain.com>\r\n"; $headers .= "Reply-To: {$name} <{$email}>\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; // 发送邮件 if (mail($admin_email, $subject, $email_body, $headers)) { echo "感谢您的留言,我们会尽快与您取得联系!"; } else { echo "邮件发送失败,请稍后重试"; } } ?>
Python Flask 实现
from flask import Flask, request import smtplib from email.mime.text import MIMEText app = Flask(__name__) @app.route('/submit-contact', methods=['POST']) def submit_contact(): # 接收表单数据 name = request.form.get('name', '').strip() email = request.form.get('email', '').strip() message = request.form.get('message', '').strip() # 基础校验 if not name or not email or '@' not in email or not message: return "请填写完整且有效的信息" # 邮件配置 admin_email = "admin@yourdomain.com" subject = "新的联系表单提交通知" # 构建邮件内容 body = f"""收到新的联系请求: 姓名:{name} 联系邮箱:{email} 留言内容: {message}""" # 构造邮件对象 msg = MIMEText(body, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = "网站联系表单 <noreply@yourdomain.com>" msg['To'] = admin_email msg.add_header('Reply-To', f"{name} <{email}>") # 通过SMTP服务器发送 try: # 替换为你的SMTP服务器信息(如阿里云、腾讯云或第三方邮件服务) with smtplib.SMTP('smtp.yourdomain.com', 587) as server: server.starttls() # 启用TLS加密 server.login('noreply@yourdomain.com', 'your_smtp_password') server.send_message(msg) return "感谢您的留言,我们会尽快与您取得联系!" except Exception as e: return f"邮件发送失败:{str(e)}" if __name__ == '__main__': app.run(debug=True)
额外注意事项
- SMTP稳定性:如果服务器自带的邮件函数不稳定,建议用第三方邮件服务(如Mailgun、SendGrid)或云服务商的SMTP服务
- 日志记录:在后端添加日志,记录邮件发送的成功/失败状态,方便后续排查问题
- 内容过滤:对用户输入的特殊字符进行转义,避免邮件格式混乱或被注入恶意代码
内容的提问来源于stack exchange,提问作者Chaitanya Kale
相关产品推荐
相关产品推荐

