如何为生产中的客户设置SMTP?

时间:2017-09-04 09:52:48

标签: django django-admin django-email

在Django中设置客户SMTP的最佳做法是什么?

我可以让它们自行设定吗?我不能在设置中做到这一点,否则他们必须告诉我他们的密码。

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '****@gmail.com'
EMAIL_HOST_PASSWORD = '*****'

有办法吗?也许允许他们通过Django管理员设置凭据?

修改

目前,最好的方法是创建一个单例对象,让我们称之为config,以存储凭据并在管理页面中注册它以允许管理员设置其凭据。然后,创建一个用于发送消息的类,并执行类似的操作:

backend = EmailBackend(host=config.host, port=config.port, username=config.username, 
                           password=config.password, use_tls=config.use_tls, fail_silently=config.fail_silently)
email = EmailMessage(subject='subj', body='body', from_email=from_email, to=to, 
             connection=backend)
像这里一样 https://stackoverflow.com/a/22287776/3371056

但也许有一些模式可以做不同的事情。

1 个答案:

答案 0 :(得分:0)

如果你想把它像配置一样保存在数据库中,建议使用django-constance,这样做的好处是你可以编辑,只能由管理员编辑(没有添加\删除界面)。

如果你使用它,你可以通过django-constance在views.py中得到的代码:

from constance import LazyConfig
config = LazyConfig()


def put_value(key, value):
    setattr(config, key, value)


def get_value(key):
    return getattr(config, key)