Django使用动态SMTP设置发送电子邮件

时间:2013-03-03 16:18:19

标签: python django django-models

我正在尝试在管理员中配置EMAIL_HOST设置,我将创建一个包含必填字段的模型:

  • EMAIL_HOST
  • EMAIL_HOST_USER
  • EMAIL_HOST_PASSWORD
  • EMAIL_PORT

但是如何使用send_mail在视图中使用这些字段?

2 个答案:

答案 0 :(得分:3)

如果您想使用send_mail,则必须创建自己的email backend,其中使用您的自定义设置,然后将其传递到send_mail属性中的connection

答案 1 :(得分:0)

使用管理页面中自定义配置的SMTP设置发送邮件,该设置独立于Django设置:

from django.core import mail
from django.core.mail.backends.smtp import EmailBackend
from <'Your SMTP setting in admin'> import <'Your model'>

def send_mail(subject, contact_list, body):

    try:
        con = mail.get_connection()
        con.open()
        print('Django connected to the SMTP server')

        mail_setting = <'Your model'>.objects.last()
        host = mail_setting.host
        host_user = mail_setting.host_user
        host_pass = mail_setting.host_pass
        host_port = mail_setting.host_port

        mail_obj = EmailBackend(
            host=host,
            port=host_port,
            password=host_pass,
            username=host_user,
            use_tls=True,
            timeout=10
        )

        msg = mail.EmailMessage(
            subject=subject,
            body=body,
            from_email=host_user,
            to=[contact_list],
            connection=con,
        )
        mail_obj.send_messages([msg])
        print('Message has been sent.')

        mail_obj.close()
        print('SMTP server closed')
        return True

    except Exception as _error:
        print('Error in sending mail >> {}'.format(_error))
        return False