【问题标题】:How to detect error when not connected to mail server from Django?未从 Django 连接到邮件服务器时如何检测错误?
【发布时间】:2018-05-15 07:50:58
【问题描述】:

我的settings.py 中有以下内容:

EMAIL_HOST = 'mail.domain.com'
EMAIL_HOST_USER = 'user@domain.com'
EMAIL_HOST_PASSWORD = '******'
EMAIL_PORT = 567
EMAIL_USE_TLS = True

我有以下代码来发送电子邮件:

email = EmailMessage()
email.subject = subject
email.body = body
email.from_email = from_email
email.to = to
email.attach(file_name, pdf, 'application/pdf')    
email.send()

有时我们的服务器已关闭,我无法检测邮件是否已发送。我能想到的一种方法是在 Django 无法连接到邮件服务器时显示 Mail not sent 错误。如何检测到服务器的连接失败?

【问题讨论】:

    标签: django email server


    【解决方案1】:

    你可以使用try except。

    try:
        email.send()
    except Exception as e:
        print str(e.message)
        # you can do some action.
    

    【讨论】:

    • 这不起作用。发生异常时,我试图返回 False 。但是,当我使用该返回布尔值来执行代码时,无论该值如何,它都会被执行。
    • str(e.message) 会给你错误信息。如果你return False 那么它会简单地执行。但是,如果您正在通过函数执行发送电子邮件,那么它将返回该布尔值。除了代码,你能分享一下你的尝试吗?
    • 我已经弄清楚出了什么问题。我从 celery 任务返回布尔值,该任务返回一个 AsyncResult 实例而不是布尔值。因此,在我看来,我捕获返回值的地方总是正确的。但是,我不知道如何从 Celery 任务中获取布尔值,我觉得解决这个问题可以解决我的问题。我认为我的 try except 子句没有问题,我只是复制了您的代码。
    猜你喜欢
    • 2016-03-14
    • 2014-08-28
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2014-03-25
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多