【发布时间】:2022-01-10 10:09:18
【问题描述】:
我希望能够使用 django 发送电子邮件,但不使用 settings.py 中的电子邮件参数。 (EMAIL_HOST、EMAIL_USE_TLS、EMAIL_HOST_PASSWORD 等...)
这些参数存储在 db 中,因为它们可能因用户而异。 如何在 base 中使用这些参数而不是在 settings.py 中使用这些参数来发送电子邮件?
class EmailThread(threading.Thread):
"""
Class email (Thread)
"""
def __init__(self, subject, html_content, recipient_list):
self.subject = subject
self.recipient_list = recipient_list
self.html_content = html_content
threading.Thread.__init__(self)
def run (self):
msg = EmailMessage(self.subject,
self.html_content,
settings.EMAIL_HOST_USER,
self.recipient_list)
msg.content_subtype = "html"
msg.send()
def send_html_mail(subject, html_content, recipient_list):
"""
send an email asynchronous
"""
EmailThread(subject, html_content, recipient_list).start()
我可以使用:email_params = EmailParameter.objects.get(user=request.user)获取参数
class EmailParameter(models.Model):
email_use_tls = models.BooleanField(_("email use tls"), default=True)
email_use_ssl = models.BooleanField(_("email use tls"), default=False)
email_host = models.URLField(_("email host"), max_length=200)
email_host_user = models.CharField(_("email host user"), max_length=200)
email_host_password = models.CharField(_("email host password"), max_length=200)
email_port = models.PositiveIntegerField(_("email port"))
default_from_email = models.EmailField(_("default from email"), max_length=200)
signature = models.TextField(_("signature"))
user = models.ForeignKey(
User,
verbose_name = _("user"),
related_name = "user_email_parameter",
on_delete=models.CASCADE
)
【问题讨论】:
-
send_html_mail在哪里调用?您需要将request传递给此。
标签: django