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

Django代理申请网站:PDF简历上传失败及邮件无法发送修复

解决方案:Django Agent申请表单CV上传与邮件发送问题

一、解决CV返回None的问题

1. 修正HTML表单的enctype属性

表单必须添加enctype="multipart/form-data"才能正确接收文件上传,否则request.FILES会为空:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <!-- 其他表单字段:姓名、邮箱、电话等 -->
    <input type="file" name="cv" accept=".pdf" required>
    <button type="submit">提交申请</button>
</form>

2. 正确处理views.py中的文件上传

  • 先确保表单类定义了带PDF验证的FileField字段:
# forms.py(独立表单类示例)
from django import forms
from django.core.validators import FileExtensionValidator

class AgentApplicationForm(forms.Form):
    name = forms.CharField(label="姓名")
    email = forms.EmailField(label="邮箱")
    cv = forms.FileField(
        label="上传简历(仅支持PDF)",
        validators=[FileExtensionValidator(['pdf'])]
    )
  • 视图中实例化表单时必须同时传入request.POST和request.FILES:
# views.py
from django.shortcuts import render
from .forms import AgentApplicationForm
from django.core.mail import EmailMessage
from django.conf import settings

def agent_application(request):
    if request.method == 'POST':
        # 必须同时传入POST和FILES数据
        form = AgentApplicationForm(request.POST, request.FILES)
        if form.is_valid():
            # 获取CV文件对象
            cv_file = request.FILES.get('cv')
            # 调试用:打印确认文件是否被接收
            print("获取到的CV文件:", cv_file)
            # 后续邮件发送逻辑
            pass
    else:
        form = AgentApplicationForm()
    return render(request, 'application_form.html', {'form': form})

3. 验证文件上传基础配置

检查settings.py中是否设置了合理的文件大小限制:

# settings.py
FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880  # 限制为5MB,可根据需求调整

二、解决邮件无法发送的问题

1. 修正settings.py的邮件配置

根据你使用的邮件服务商调整参数,以下是QQ邮箱的配置示例:

# settings.py
# 开发环境可先使用控制台后端测试邮件内容
# EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

# 生产环境SMTP配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-qq-email@qq.com'
EMAIL_HOST_PASSWORD = 'your-app-auth-code'  # 注意是邮箱授权码,不是登录密码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

2. 正确构造带附件的邮件

在表单验证通过后,使用EmailMessage类发送带CV附件的邮件:

# views.py(在form.is_valid()逻辑内)
if cv_file:
    # 构造邮件内容
    subject = f"新Agent申请:{form.cleaned_data['name']}"
    message_content = f"""
    申请人信息:
    姓名:{form.cleaned_data['name']}
    邮箱:{form.cleaned_data['email']}
    """
    hr_email = ['hr@yourcompany.com']  # 替换为实际HR邮箱

    # 创建邮件对象
    email = EmailMessage(
        subject,
        message_content,
        settings.DEFAULT_FROM_EMAIL,
        hr_email
    )
    # 附加CV文件
    email.attach(
        cv_file.name,
        cv_file.read(),
        cv_file.content_type
    )

    # 发送邮件并捕获异常
    try:
        email.send()
        return render(request, 'success.html')  # 跳转成功页面
    except Exception as e:
        print("邮件发送失败:", str(e))
        return render(request, 'application_form.html', {
            'form': form,
            'error': '邮件发送失败,请稍后重试'
        })

3. 常见排查点

  • 确认邮件服务商的SMTP服务已开启(如QQ邮箱需在设置中开启SMTP并生成授权码)
  • 检查服务器防火墙是否允许访问对应SMTP端口(如587、465)
  • 开发阶段先用console.EmailBackend验证邮件内容是否正确,再切换到SMTP后端

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:22:09