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

如何修复Django中提交表单时的‘not enough values to unpack’错误

Django联系表单发送Gmail报错:not enough values to unpack (expected 2, got 1)

我要实现用户提交联系表单时将信息发送到Gmail的功能,但遇到了ValueError: not enough values to unpack (expected 2, got 1)错误,尝试多种方法未解决,求相关解决方案。

settings.py 配置

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = 'demo@gmail.com'
EMAIL_HOST_PASSWORD = 'vkqhtdnqhzfrcuhs'
EMAIL_USE_TLS = True

views.py 代码

def ContactME(request):
    if request.method == "POST":
        MessageSenderName = request.POST.get('name'),
        SenderEmail = request.POST.get('email'),
        SenderMessage = request.POST.get('message'),
        Contact.objects.create(
            Name = MessageSenderName,
            Email = SenderEmail,
            Message = SenderMessage,
        )

        send_mail(
            MessageSenderName,
            SenderMessage,
            SenderEmail,
            ['demo@gmail.com'],
        )

报错信息

ValueError at /ContactME
not enough values to unpack (expected 2, got 1)
Request Method: POST
Request URL:    http://127.0.0.1:8000/ContactME
Django Version: 4.1
Exception Type: ValueError
Exception Value:    
not enough values to unpack (expected 2, got 1)
Exception Location: D:\1_WebDevelopment\0-Portfolio\venv\lib\site-packages\django\core\mail\message.py, line 99, in sanitize_address
Raised during:  portfolioApp.views.ContactME
Python Executable:  D:\1_WebDevelopment\0-Portfolio\venv\Scripts\python.exe
Python Version: 3.9.5
Python Path:    
['D:\\1_WebDevelopment\\0-Portfolio',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\python39.zip',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\DLLs',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\lib',
 'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39',
 'D:\\1_WebDevelopment\\0-Portfolio\\venv',
 'D:\\1_WebDevelopment\\0-Portfolio\\venv\\lib\\site-packages']
Server time:    Tue, 23 Aug 2022 17:00:59 +0000

解决方案

错误根源是变量赋值末尾的逗号,导致MessageSenderName、SenderEmail、SenderMessage变成了元组,而Django的send_mail函数需要字符串类型的参数,元组传入后触发了解包错误。

修改views.py,去掉变量赋值末尾的逗号:

def ContactME(request):
    if request.method == "POST":
        MessageSenderName = request.POST.get('name')
        SenderEmail = request.POST.get('email')
        SenderMessage = request.POST.get('message')
        Contact.objects.create(
            Name = MessageSenderName,
            Email = SenderEmail,
            Message = SenderMessage,
        )

        send_mail(
            f"来自{MessageSenderName}的联系消息",
            SenderMessage,
            SenderEmail,
            ['demo@gmail.com'],
        )

额外注意事项:

  • 确保Gmail账号已开启低安全性应用访问,或在开启两步验证的情况下使用应用专用密码,否则Google会拦截邮件发送请求。
  • send_mail第一个参数是邮件主题,原代码用发件人姓名当主题语法可行,但建议设置更清晰的主题,比如示例中的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:48:25