Django邮件未被保存(文件后端)

时间:2018-04-19 07:38:58

标签: python django email django-settings django-email

我已将Django配置为使用file backend在我的本地计算机上发送电子邮件。这似乎在之前工作正常,所有邮件都记录在我在settings.py文件中指定的目录中:

EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/code/mails/'

然而,这突然停止了工作。我已经检查了文件夹的权限,这似乎没问题。我没有看到任何错误。我正在使用docker,当我启动Python服务器时,我的终端显示了日志。通常当出现错误时我会在那里看到它。但没有出现。为了测试,我已重命名该文件夹并尝试发送邮件。这次,也没有出现错误。在生产中,我的settings.py不同但其他所有内容都相同,电子邮件发送得很好。所以代码似乎工作,但本地基于文件的后端似乎是一个问题。

有人有什么想法吗?

我已配置了这些日志设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/code/logs/debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

日志似乎工作正常并提供详细的日志记录;但没有一个与电子邮件错误有关。

4 个答案:

答案 0 :(得分:3)

您可以在代码中看到很多提高: https://github.com/django/django/blob/stable/2.1.x/django/core/mail/backends/filebased.py#L13

因此,如果使用您的设置以及文件夹的正确权限,您将看不到电子邮件或错误,也许有些设置会覆盖您在此处发布的两个设置。

再次检查您的本地设置,并确保仅声明一个EMAIL_BACKEND。

答案 1 :(得分:2)

由于没有错误,该目录存在,并且在您指定的目录中仍然没有创建文件,因此代码可能在其他目录中运行并创建文件。

创建连接时,您的file_path关键字设置为什么?

  

文件后端

     

文件后端将电子邮件写入文件。为创建了一个新文件   在此后端打开的每个新会话。目录到   写入文件的文件来自 EMAIL_FILE_PATH   设置或使用 file_path 关键字创建连接时    get_connection()

     

要指定此后端,请在您的设置中添加以下内容:

EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location

Django Docs File Backend

答案 2 :(得分:0)

我自己花了一些时间,经过一番挫折后,我只是交换了两个变量,然后它起作用了。

EMAIL_FILE_PATH = '/code/mails/'
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'

答案 3 :(得分:0)

似乎EMAIL_FILE_PATH指向绝对路径。 对我来说,此解决方案有效:

EMAIL_FILE_PATH = os.path.join(BASE_DIR, 'app/emailfolder')