EmailBackend通过Django中的多个SMTP发送电子邮件 [英] EmailBackend for sending email through multiple SMTP in 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屋!