获取的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或方式与当前的后端没有产生任何令人满意的结果去做。
Answer 1:
如果要覆盖所提供的设置,你可以创建自己的连接并将其提供给send_email
或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)
更新:确保使用完后关闭连接,@ michel.iamit答案要点,以显示连接代码缓存SMPT。 @dhackner的回答显示了如何语句中使用自动关闭连接。
Answer 2:
我想稍微修改丹尼尔·贝克曼的回答像使用上下文管理要在文档。 它会照顾的open()和close()调用本身。
from django.core.mail import get_connection, send_mail
from django.core.mail.message import EmailMessage
with get_connection(
host=my_host,
port=my_port,
username=my_username,
password=my_password,
use_tls=my_use_tls
) as connection:
EmailMessage(subject1, body1, from1, [to1],
connection=connection).send()
https://docs.djangoproject.com/en/dev/topics/email/#email-backends
Answer 3:
这可能是一个想法,看看Django的的电子邮件后台,并创建一个定制的一个。
这里是代码: https://github.com/django/django/blob/master/django/core/mail/backends/smtp.py
这个例子说明了如何使自定义一个(这一个在SMTP代替使用SMTP_SSL):
https://gist.github.com/jsummerfield/1486891
我分叉那一个,这两个(这样我就可以使用不同的网站使用不同的邮件设置一个后端)相结合:
https://gist.github.com/iamit/5415771
不知道是否会工作,但正如你看到以上所有返回代码在打开的连接,如果已经有一个连接...因此,也许有您的解决方案开始....不这样做密切,开放的连接,并使用不同的设置重新打开......(不知道是否可行)。
Answer 4:
抱歉,无法对答案的其余部分,没有足够的代表直接评论。
只需一个加法:
connection = get_connection(host=my_host,
port=my_port,
username=my_username,
password=my_password,
user_tls=my_use_tls)
应该
connection = get_connection(host=my_host,
port=my_port,
username=my_username,
password=my_password,
use_tls=my_use_tls)
这只是如果你不使用TLS的问题(你应该),因为它默认为True。
Answer 5:
使用不同的配置为每个站点。
一种方法是有,除了你的settings.py
,一个settings_SITENAME.py
为每个站点。 这些文件将具有自定义邮件服务器设置。 每个站点都会有settings_local.py
是一个符号链接到它自己的自定义设置文件
然后把这个节在底部settings.py
:
try:
from settings_local import *
except ImportError:
pass
现在你有每个站点自定义设置
文章来源: EmailBackend for sending email through multiple SMTP in Django