【问题标题】:Django mails not being saved (File backend)Django 邮件未保存(文件后端)
【发布时间】:2018-09-29 14:49:41
【问题描述】:

我已将 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,
        },
    },
}

日志似乎工作正常并提供详细的日志记录;但这些都与电子邮件错误无关。

【问题讨论】:

  • 您能否分享有关您的项目的更多信息,例如 Python e Django 版本和完整的本地设置?
  • 你最近更新了你的 Django 版本吗?您是否尝试过通过manage.py 在本地运行,如果可以,它在那里工作吗?
  • 你也可以分享相关的 docker 配置吗? /code/mails 是在容器内部还是从主机安装?

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


【解决方案1】:

正如您在代码中看到的,有很多加薪: https://github.com/django/django/blob/stable/2.1.x/django/core/mail/backends/filebased.py#L13

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

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

【讨论】:

    【解决方案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

    【讨论】:

      【解决方案3】:

      我在尝试使身份验证正常工作时遇到了这个问题,特别是 密码重置。我花了几个小时才发现我用于重置的电子邮件地址对于我的数据库中的任何用户都不存在,当然,Django 保持沉默是很好的安全性。愚蠢的错误,但我希望有人发布过它,所以就在这里。

      【讨论】:

      • 我知道我需要使用现有的电子邮件地址,但我没有意识到我没有加载我的装置。这很容易错过 - 感谢您指出!
      【解决方案4】:

      似乎 EMAIL_FILE_PATH 指的是绝对路径。 对我来说,这个解决方案有效:

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

      【讨论】:

        【解决方案5】:

        我自己花了一些时间来解决这个问题,经过一些挫折后,我只是交换了两个变量,它就奏效了。

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

        【讨论】:

        • 这对我不起作用。
        猜你喜欢
        • 2018-01-12
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 2011-08-18
        • 2019-03-22
        • 2013-04-17
        • 2014-08-09
        • 2020-11-07
        相关资源
        最近更新 更多