动态Django邮件配置

发布于 2021-01-29 16:53:21

我不想在setting.py中使用电子邮件配置字段,我想将它们放入模型中。

class Configuration(models.Model):
    email_use_tls = models.BooleanField(_(u'EMAIL_USE_TLS'),default=True)
    email_host = models.CharField(_(u'EMAIL_HOST'),max_length=1024)
    email_host_user = models.CharField(_(u'EMAIL_HOST_USER'),max_length=255)
    email_host_password = models.CharField(_(u'EMAIL_HOST_PASSWORD'),max_length=255)
    email_port = models.PositiveSmallIntegerField(_(u'EMAIL_PORT'),default=587)
    ....

配置django.core.mail.send_mail行为的最佳实践是什么?我应该将send_mail代码复制到我的项目中吗?那不是我想要的。

关注者
0
被浏览
40
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    非常有趣的问题。看来这已经在EmailMessage类中实现了。

    首先,您需要配置电子邮件后端

    from django.core.mail import EmailMessage
    from django.core.mail.backends.smtp import EmailBackend
    
    
    config = Configuration.objects.get(**lookup_kwargs)
    
    backend = EmailBackend(host=config.host, port=congig.port, username=config.username, 
                           password=config.password, use_tls=config.use_tls, fail_silently=config.fail_silently)
    

    然后只需将连接传递到EmailMessage

    email = EmailMessage(subject='subj', body='body', from_email=from_email, to=to, 
                 connection=backend)
    

    然后发送电子邮件:)

    email.send()
    

    如果您要html或文件附件,请使用Ofc代替EmailMultiAlternatives



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看