Issue
I don't want to use email configuration fields in setting.py, i want to put them in to a model.
class Configuration(models.Model):
email_use_tls = models.BooleanField(_(u'EMAIL_USE_TLS'),default=True)
email_host = models.CharField(_(u'EMAIL_HOST'),max_length=1024)
email_host_user = models.CharField(_(u'EMAIL_HOST_USER'),max_length=255)
email_host_password = models.CharField(_(u'EMAIL_HOST_PASSWORD'),max_length=255)
email_port = models.PositiveSmallIntegerField(_(u'EMAIL_PORT'),default=587)
....
What is the best practice to configure django.core.mail.send_mail behaviour? Should i copy send_mail code to my project? Thats not what i want.
Solution
Very interesting question. It seems like this is already implemented in EmailMessage class.
First you need to configure email backend
from django.core.mail import EmailMessage
from django.core.mail.backends.smtp import EmailBackend
config = Configuration.objects.get(**lookup_kwargs)
backend = EmailBackend(host=config.host, port=congig.port, username=config.username,
password=config.password, use_tls=config.use_tls, fail_silently=config.fail_silently)
Then just pass connection to EmailMessage
email = EmailMessage(subject='subj', body='body', from_email=from_email, to=to,
connection=backend)
Then send email :)
email.send()
Ofc if you want html or file attachments use EmailMultiAlternatives instead
Answered By - Andrey Nelubin
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.