无效的 SMTPAPI Header: send_at 必须是时间戳
Invalid SMTPAPI Header: send_at must be a timestamp
我正在通过 SMTP API 安排电子邮件。这是我到目前为止尝试过的:
from smtpapi import SMTPAPIHeader
from django.core.mail import send_mail
from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
from django.template import Template, Context
def campaign_email(lg_user, template):
user = lg_user.id
email = user.email
fname = lg_user.id.first_name
lname = lg_user.id.last_name
mobile = lg_user.contact_no
purchase = lg_user.active_user_subjects.values_list('subject', flat=True)
expiry = str(lg_user.active_user_subjects.values_list('at_expiry', flat=True))
filename = '/tmp/campaign_mailer.html'
opened_file = open(filename, "r").read()
temp = Template(opened_file)
c = Context({'fname': fname, 'lname': lname, 'subject': subject, 'email': email,
'mobile': mobile, 'purchase': purchase, 'expiry': expiry})
header = SMTPAPIHeader()
html_content = temp.render(c)
send_at = {"send_at": 1472058300}
header.set_send_at(send_at)
msg = EmailMultiAlternatives(subject, html_content, sender, [email],
headers={'X-SMTPAPI': header.json_string()})
msg.attach_alternative(html_content, "text/html")
msg.send(fail_silently=True)
为了检查,如果我的 header(在打印 header.json_string() 时解析为:
{
"send_at": {
"send_at": 1472051700
}
}
) 是否有效,我检查了 https://sendgrid.com/docs/Utilities/smtpapi_validator.html,结果完全有效。
但是我从 sendgrid 的支持那里得到的失败邮件指出失败的原因是:send_at 必须是时间戳。我相信,在 documentation 中,它明确指出时间戳应该是 UNIX 格式——这就是我提供给 send_at 键的值。
那么,我该如何解决这个错误?
set_send_at()
接受一个整数参数,但你传递给它的是一个字典 ({"send_at": 1472058300}
)。这是无效的并导致错误。
改为:
header.set_send_at(1472058300)
我正在通过 SMTP API 安排电子邮件。这是我到目前为止尝试过的:
from smtpapi import SMTPAPIHeader
from django.core.mail import send_mail
from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
from django.template import Template, Context
def campaign_email(lg_user, template):
user = lg_user.id
email = user.email
fname = lg_user.id.first_name
lname = lg_user.id.last_name
mobile = lg_user.contact_no
purchase = lg_user.active_user_subjects.values_list('subject', flat=True)
expiry = str(lg_user.active_user_subjects.values_list('at_expiry', flat=True))
filename = '/tmp/campaign_mailer.html'
opened_file = open(filename, "r").read()
temp = Template(opened_file)
c = Context({'fname': fname, 'lname': lname, 'subject': subject, 'email': email,
'mobile': mobile, 'purchase': purchase, 'expiry': expiry})
header = SMTPAPIHeader()
html_content = temp.render(c)
send_at = {"send_at": 1472058300}
header.set_send_at(send_at)
msg = EmailMultiAlternatives(subject, html_content, sender, [email],
headers={'X-SMTPAPI': header.json_string()})
msg.attach_alternative(html_content, "text/html")
msg.send(fail_silently=True)
为了检查,如果我的 header(在打印 header.json_string() 时解析为:
{
"send_at": {
"send_at": 1472051700
}
}
) 是否有效,我检查了 https://sendgrid.com/docs/Utilities/smtpapi_validator.html,结果完全有效。
但是我从 sendgrid 的支持那里得到的失败邮件指出失败的原因是:send_at 必须是时间戳。我相信,在 documentation 中,它明确指出时间戳应该是 UNIX 格式——这就是我提供给 send_at 键的值。
那么,我该如何解决这个错误?
set_send_at()
接受一个整数参数,但你传递给它的是一个字典 ({"send_at": 1472058300}
)。这是无效的并导致错误。
改为:
header.set_send_at(1472058300)