在django中捕获无Internet连接错误

时间:2013-02-25 00:04:32

标签: django sockets email

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

3 个答案:

答案 0 :(得分:0)

尝试调用sendmail函数。

import socket

try:
   ...
except socket.gaierror:
   pass

答案 1 :(得分: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)

这样做的好处是,如果无法发送电子邮件,您将始终在生产计算机上或在连接互联网的计算机上进行开发时获得例外。

答案 2 :(得分: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 ''