我花了很多时间弄清楚如何在Django的指定时间发送电子邮件,所以我发布了答案,以便为其他人节省一些时间。
我的用例是在工作时间发送电子邮件。使用芹菜是a bad idea。但Sendgrid可以发送最多3天的电子邮件。这就是我们所需要的。
答案 0 :(得分:1)
我所做的:
from django.core.mail import EmailMultiAlternatives
from django.template.context import Context
from django.template.loader import get_template
from smtpapi import SMTPAPIHeader
def send_email(subject, template_name, context, to, bcc=None, from_email=settings.DEFAULT_FROM_EMAIL, send_at=None):
header = SMTPAPIHeader()
body = get_template(template_name).render(Context(context))
if send_at:
send_at = {"send_at": send_at}
header.set_send_at(send_at)
email = EmailMultiAlternatives(
subject=subject,
body=body,
from_email=from_email,
to=to,
bcc=bcc,
headers={'X-SMTPAPI': header.json_string()}
)
email.attach_alternative(body, 'text/html')
email.send()
请勿忘记将其设置在标题 X-SMTPAPI 中,因为我无法在任何地方找到它。 send_at应该是一个时间戳
此外,您还可以看到如何使用sendgrid.SendGridClient添加标题或其他内容: https://sendgrid.com/docs/Utilities/code_workshop.html/scheduling_parameters.html
import sendgrid
...
sg = sendgrid.SendGridClient('apiKey')
message = sendgrid.Mail()
message.add_to('John Doe <example@mailinator.com>')
message.set_subject('Example')
message.set_html('Body')
message.set_text('Body')
message.set_from('Doe John <example@example.com>')
message.smtpapi.set_send_at(timestamp)
sg.send(message)