如何在 Python 中组合 .decode('utf-8') 和 .format()?

How to combine .decode('utf-8') and .format() in Python?

我正在尝试在 Python 中发送一封电子邮件,该电子邮件将在 UTF-8 中编码并具有格式(因此每个客户都会收到他的名字等)。

这是我负责发送电子邮件的函数,经过简化:

def sendMail(recipient, recipientName):
    file = open('~/mail.txt'.format(name), 'r')
    data = file.read()
    msg = MIMEText(data.decode('utf-8'), 'html', 'utf-8') # <<<<
    file.close()
    mail = smtplib.SMTP_SSL(ip, port)
    mail.login(mailUser, mailPassword)
    mail.sendmail(mailHost, recipient, msg.as_string().format(recipientName)) # <<<<
    mail.quit()

这是 content of mail.txt file

这里的相关内容基本上是 3rd7th 行函数 - 其余部分与邮件发送有关并且工作正常。如果我不使用 .decode('utf-8'),格式很好 - 但反过来电子邮件几乎不可读。

我尝试了 % 参数和 f 参数也没有成功 - 基本上只有 .format 除了没有实际工作之外没有任何错误。

.format() 应用到 msg.as_string() 似乎非常脆弱。此时,msg 应该包含一个正确的 MIME 编码的消息,它可能不再包含您的格式字符串(例如,如果内容需要 base64 编码,它看起来根本不像您的输入)。在流程的较早阶段应用格式。

def sendMail(recipient, recipientName):
    with open('~/mail{0}.txt'.format(name), 'r', encoding='utf-8') as file:
        data = file.read()
        msg = MIMEText(data.format(recipientName), 'html', 'utf-8')
    mail = smtplib.SMTP_SSL(ip, port)
    mail.login(mailUser, mailPassword)
    mail.sendmail(mailHost, recipient, msg.as_string())
    mail.quit()