2013-02-25 43 views
0

我目前使用django发送电子邮件,但问题是,当我在没有互联网连接的本地主机上工作时,我尝试发送电子邮件。我得到[Errno 11004] getaddrinfo失败,这是可以理解的。问题是,我想知道是否有办法纠正错误,以便我可以正确地管理它们。有没有办法?在django中捕获互联网连接错误

回答

0

试试这个你正在调用sendmail函数的地方。

import socket 

try: 
    ... 
except socket.gaierror: 
    pass 
0

,而不是试图发送一封电子邮件,然后赶上本地主机的错误没有互联网连接的情况下,根本就没有尝试在开发过程中发送电子邮件。您可以使用django.settings.DEBUG选项来确定是否应发送电子邮件。

下面是如何将电子邮件路由到文件进行测试或在没有互联网连接的情况下运行的示例。

from django.core import mail 
from django import settings 
import tempfile 

# Change SAVE_EMAIL_TO_FILE to be appropriate for your setup. It could 
# be based on settings.DEBUG or some other indication that you're running 
# without an internet connection. 
SAVE_EMAIL_TO_FILE = settings.DEBUG 

def my_send_mail(*args, **kwargs): 
    if SAVE_EMAIL_TO_FILE: 
     # No emails during development. Save to a file instead. 
     with tempfile.NamedTemporaryFile(delete=False) as email_file: 
      email_file.write("{args}\n{kwargs}\n".format(
       args=str(args), 
       kwargs=str(kwargs))) 
    else: 
     # Production environment. 
     mail.send_mail(*args, **kwargs) 

这有你总是会得到一个生产机器或互联网连接的机器上开发过程中的异常,如果邮件无法发送的好处。

0
try: 

except Exception, e: 
    code = '000' 
    if hasattr(e, 'code'): 
     code = e.code 
     msg = 'No message returned from the server' 
    if hasattr(e, 'msg'): 
     msg = e.msg 
    messages.error(
     request, 
      'Error connecting to server. ERROR: {0} {1}'.format(code, msg) 
    return ''