如何在 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()
这里的相关内容基本上是 3rd
和 7th
行函数 - 其余部分与邮件发送有关并且工作正常。如果我不使用 .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()
我正在尝试在 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()
这里的相关内容基本上是 3rd
和 7th
行函数 - 其余部分与邮件发送有关并且工作正常。如果我不使用 .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()