Me gustaría poder enviar correos electrónicos con django pero sin usar los parámetros de correo electrónico en settings.py. (EMAIL_HOST, EMAIL_USE_TLS, EMAIL_HOST_PASSWORD, etc...)
Estos parámetros se almacenan en db porque pueden ser diferentes según el usuario. ¿Cómo usar estos parámetros en la base para enviar correos electrónicos y no los de 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() Puedo obtener los parámetros usando: 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 )Simplemente mueva todos los parámetros necesarios dentro de la instancia de clase y utilícelos en lugar de settings.XXX :
class EmailThread(threading.Thread): def __init__(self, subject, html_content, recipient_list, email_host_user): self.subject = subject self.recipient_list = recipient_list self.html_content = html_content # set parameter to instance self.email_host_user = email_host_user threading.Thread.__init__(self) def run (self): msg = EmailMessage(self.subject, self.html_content, # use instance parameter self.email_host_user, self.recipient_list) msg.content_subtype = "html" msg.send() # add email_host_user to be able set it when call mail send process def send_html_mail(subject, html_content, recipient_list, email_host_user): EmailThread(subject, html_content, recipient_list, email_host_user).start()Ahora puede enviar correo con parámetros personalizados:
e_h_u = EmailParameter.objects.get(user=request.user).email_host_user send_html_mail(subject, html_content, recipient_list, e_h_u)