2012-01-25 63 views
2

我无法使用django.core.mail.send_mail函数发送电子邮件。用send_mail发送电子邮件时Django“错误填充”错误

用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) 

什么可能会发生任何想法?

UPADTE:

的主题是(这是葡萄牙语):

[Django] [FRUGAR-WiDGET] novo widget criado

身体是:

Novo widget criado: 
Nome:test 10 
Por: dudu 
+0

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

回答

0

Base-64将3个字节(0-255范围内的回波)编码为4个字节(每个在 范围内)。输出的长度为总是是4的多个 (忽略空格);该方法增加了额外的填充字节(ASCII '=')以确保如果输入的长度不是 的倍数3,就是这种情况。

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

最简单的解决方案是确保您的数据包总是4个字节的倍数。

+0

感谢您的解释。我发现了导致此错误的问题,并且它与电子邮件地址身份验证有关。 – duduklein

+0

发布您的解决方案作为答案,并接受它来关闭此问题。 –

0

问题在于验证。 Django无法使用邮件服务器进行身份验证。一旦我解决了这个问题,问题就没有了。