我正在以编程方式向用户发送电子邮件,我包括HTML和纯文本版本。在其他iphone电子邮件客户端我默认情况下已经尝试了HTML渲染,但是,iphone的邮件应用程序决定始终以纯文本呈现。默认情况下,我的iphone的邮件应用程序中的其他电子邮件(例如简报)在HTML中正确呈现,因此这让我觉得问题来自于我发送电子邮件的方式。
调查此问题我决定删除明文部分并发送几封电子邮件。执行此操作后,邮件应用程序默认呈现HTML。问题是我需要在我的电子邮件中包含明文部分,因此删除它不是一种选择。
发送电子邮件我正在使用python 3.5的电子邮件和 smtplib 库。这是相关的代码片段:
class GmailMailer(MailSender):
def send_email(self):
msg = self.prepare_email()
with smtplib.SMTP(m_config['GMAIL_SMTP_ADDRESS'],
m_config['GMAIL_SMTP_PORT']) as smtpserver:
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login(m_config['GMAIL_USER_ADDRESS'], m_config['GMAIL_USER_PASSWORD'])
smtpserver.send_message(msg, self.from_addr, self.to_addr)
print('Email sent to: {0}, with address: {1}'.format(self.to_addr, self.from_addr))
return msg.as_string()
prepare_email 在父类中定义,定义为:
def prepare_email(self):
msg = MIMEMultipart('alternative')
msg['Subject'] = self.subject
msg['From'] = self.from_addr
msg['To'] = self.to_addr
html_template = template_env.get_template('{0}.html'.format(self.template_name))
text_template = template_env.get_template('{0}_text.html'.format(self.template_name))
html_msg = html_template.render(self.context)
text_msg = text_template.render(self.context)
msg.attach(MIMEText(html_msg, 'html'))
msg.attach(MIMEText(text_msg, 'text'))
return msg
实际文本是使用Jinja2从模板生成的,其中包含传递给构造函数的变量以及特定于每个用户的变量。由于该过程非常简单,并且在Gmail和Spark电子邮件客户端中都能正确呈现电子邮件,因此我认为问题不是由Jinja2呈现text / html生成的。