如何修复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
相关产品推荐
相关产品推荐

