【问题标题】:Django "Incorrect Padding" error when sending email with send_mail使用 send_mail 发送电子邮件时出现 Django“不正确的填充”错误
【发布时间】:2012-01-25 16:25:09
【问题描述】:

我无法使用 django.core.mail.send_mail 功能发送电子邮件。

使用 mail_admins 和 mail_managers 发送邮件工作正常,所以我猜问题不是我的邮件配置。

我在

中收到“不正确的填充”错误
File "/usr/lib/python2.6/base64.py" in decodestring
321.     return binascii.a2b_base64(s)

这也很奇怪,因为我的 django 服务器在 virtualenv 中运行。 完整的追溯如下:

Traceback:
File "/env_frugar/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/env/lib/python2.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)
File "/env/lib/python2.6/site-packages/django/views/generic/base.py" in view
  47.             return self.dispatch(request, *args, **kwargs)
File "/env/lib/python2.6/site-packages/django/views/generic/base.py" in dispatch
  68.         return handler(request, *args, **kwargs)
File "/env/lib/python2.6/site-packages/django/views/generic/edit.py" in post
  172.         return super(BaseCreateView, self).post(request, *args, **kwargs)
File "/env/lib/python2.6/site-packages/django/views/generic/edit.py" in post
  138.             return self.form_valid(form)
File "/env/lib/python2.6/site-packages/django/views/generic/edit.py" in form_valid
  112.         self.object = form.save()
File "/env/lib/python2.6/site-packages/django/forms/models.py" in save
  363.                              fail_message, commit, construct=False)
File "/env/lib/python2.6/site-packages/django/forms/models.py" in save_instance
  85.         instance.save()
File "/env/lib/python2.6/site-packages/django/db/models/base.py" in save
  460.         self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/env/lib/python2.6/site-packages/django/db/models/base.py" in save_base
  570.                 created=(not record_exists), raw=raw, using=using)
File "/env/lib/python2.6/site-packages/django/dispatch/dispatcher.py" in send
  172.             response = receiver(signal=self, sender=sender, **named)
File "/myproject/myapp/models.py" in send_email_after_widget_creation
  88.         send_mail(subject, message, from_email, recipient_list, fail_silently= not settings.DEBUG)
File "/env/lib/python2.6/site-packages/django/core/mail/__init__.py" in send_mail
  61.                         connection=connection).send()
File "/env/lib/python2.6/site-packages/django/core/mail/message.py" in send
  251.         return self.get_connection(fail_silently).send_messages([self])
File "/env/lib/python2.6/site-packages/django/core/mail/backends/smtp.py" in send_messages
  79.             new_conn_created = self.open()
File "/env/lib/python2.6/site-packages/django/core/mail/backends/smtp.py" in open
  48.                 self.connection.login(self.username, self.password)
File "/usr/lib/python2.6/smtplib.py" in login
  574.             (code, resp) = self.docmd(encode_cram_md5(resp, user, password))
File "/usr/lib/python2.6/smtplib.py" in encode_cram_md5
  537.             challenge = base64.decodestring(challenge)
File "/usr/lib/python2.6/base64.py" in decodestring
  321.     return binascii.a2b_base64(s)

对可能发生的事情有什么想法吗?

更新:

主题是(葡萄牙语):

[Django] [FRUGAR-WiDGET] novo widget criado

身体是:

Novo widget criado:
Nome:test 10
Por: dudu

【问题讨论】:

  • 邮件正文的内容是什么样的?

标签: django sendmail


【解决方案1】:

Base-64 将 3 个字节(在 0-255 范围内的回显)编码为 4 个字节(每个 范围更有限)。输出的长度是 always 的倍数 4(忽略空格);该方法添加了额外的填充字节(ASCII '=') 以确保如果输入的长度不是 3 的倍数。

因此,如果解码引发“不正确的填充”错误,则删除任何 空格并附加额外的 ASCII '=' 以使其长度成为 3、然后再试解码。 (或者你可以重复添加一个垫 字符并重试,最多 3 次。)

对您来说最简单的解决方案是确保您的数据包始终是 4 字节的倍数。

【讨论】:

  • 感谢您的解释。我找到了导致此错误的问题,并且与电子邮件地址身份验证有关。
  • 发布您的解决方案作为答案并接受它以关闭此问题。
【解决方案2】:

问题出在身份验证上。 Django 无法通过邮件服务器进行身份验证。一旦我解决了这个问题,问题就消失了。

【讨论】:

  • 我也遇到了类似的问题,你到底纠正了什么?
猜你喜欢
  • 2019-10-17
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 2022-08-07
  • 2022-01-17
相关资源
最近更新 更多