EmailBackend通过Django中的多个SMTP发送电子邮件 [英] EmailBackend for sending email through multiple SMTP in Django

查看:245
本文介绍了EmailBackend通过Django中的多个SMTP发送电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让Django发送电子邮件很好地解释了这里使用标准设置,如下所示。


  EMAIL_BACKEND ='django.core.mail.backends $ smtp.EmailBackend'
EMAIL_HOST =mail.mysmtpserver.somewhere
#EMAIL_PORT
EMAIL_HOST_USER =my @ login
EMAIL_HOST_PASSWORD =mypassword
#EMAIL_USE_TLS = True


然后使用 django.core .mail.EmailMessage 发送它。



如何运行多个站点,需要其中的每一个才能发送电子邮件自己的SMTP服务器(或者只是在同一SMTP服务器中登录不同)?



搜索这样的EmailBackend或使用当前后端方式进行操作并没有产生令人满意的结果。

解决方案

如果要覆盖提供的设置,您可以创建自己的连接,并将其提供给来自django的send_email EmailMessage

  core.mail import get_connection,send_mail 
from django.core.mail.message import EmailMessage
#TODO:插入聪明的设置机制
my_host =''
my_port = 587
my_username =''
my_password =''
my_use_tls = True
connection = get_connection(host = my_host,
port = my_port,
username = my_username,
password = my_password,
use_tls = my_use_tls)

send_mail('diditwork?','test message','from_email',['to'],connection = connection)
#或
EmailMessage('diditwork?','test message','from_email',['to'],connection = connection ).send(fail_silently = False)

更新:确保关闭连接使用后,@ michel.iamit的回答点显示连接的代码缓存为smpt。 @dhackner答案显示如何使用语句自动关闭连接。


Getting Django to send an email is nicely explained here using standard settings as shown below.

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "mail.mysmtpserver.somewhere"
#EMAIL_PORT
EMAIL_HOST_USER = "my@login"
EMAIL_HOST_PASSWORD = "mypassword"
#EMAIL_USE_TLS = True

Then using django.core.mail.EmailMessage to send it of.

How ever, what if you are running multiple sites and need each of these to send email through their own SMTP server (or just different login in the same SMTP server)?

Searching for a EmailBackend like this or a way to do it with the current backend did not produce any satisfactory results.

解决方案

If you want to override the provided settings you can just create your own connection and provide it to send_email or EmailMessage

from django.core.mail import get_connection, send_mail
from django.core.mail.message import EmailMessage
# TODO: Insert clever settings mechanism
my_host = ''
my_port = 587
my_username = ''
my_password = ''
my_use_tls = True
connection = get_connection(host=my_host, 
                            port=my_port, 
                            username=my_username, 
                            password=my_password, 
                            use_tls=my_use_tls) 

send_mail('diditwork?', 'test message', 'from_email', ['to'], connection=connection)
# or
EmailMessage('diditwork?', 'test message', 'from_email', ['to'], connection=connection).send(fail_silently=False)

Update: Make sure to close the connection after use, @michel.iamit answer points to code showing the connection is cached for smpt. @dhackner answer shows how to automatically close a connection using with statement.

这篇关于EmailBackend通过Django中的多个SMTP发送电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆