iPhone邮件应用程序默认以纯文本显示我的电子邮件

时间:2017-04-17 13:03:42

标签: python iphone email smtplib

我正在以编程方式向用户发送电子邮件,我包括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生成的。

0 个答案:

没有答案