Python - How to send utf-8 e-mail?

匿名 (未验证) 提交于 2019-12-03 08:42:37

问题:

how to send utf8 e-mail please?

import sys import smtplib import email import re  from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText  def sendmail(firm, fromEmail, to, template, subject, date):     with open(template, encoding="utf-8") as template_file:         message = template_file.read()      message = re.sub(r"{{\s*firm\s*}}", firm, message)     message = re.sub(r"{{\s*date\s*}}", date, message)     message = re.sub(r"{{\s*from\s*}}", fromEmail, message)     message = re.sub(r"{{\s*to\s*}}", to, message)     message = re.sub(r"{{\s*subject\s*}}", subject, message)      msg = MIMEMultipart("alternative")     msg.set_charset("utf-8")      msg["Subject"] = subject     msg["From"] = fromEmail     msg["To"] = to      #Read from template     html = message[message.find("html:") + len("html:"):message.find("text:")].strip()     text = message[message.find("text:") + len("text:"):].strip()      part1 = MIMEText(html, "html")     part2 = MIMEText(text, "plain")      msg.attach(part1)         msg.attach(part2)      try:         server = smtplib.SMTP("10.0.0.5")         server.sendmail(fromEmail, [to], msg.as_string())         return 0     except Exception as ex:         #log error         #return -1         #debug         raise ex     finally:         server.quit()  if __name__ == "__main__":     #debug     sys.argv.append("Moje")     sys.argv.append("newsletter@example.cz")     sys.argv.append("subscriber@example.com")     sys.argv.append("may2011.template")     sys.argv.append("This is subject")     sys.argv.append("This is date")       if len(sys.argv) != 7:         exit(-2)      firm = sys.argv[1]     fromEmail = sys.argv[2]     to = sys.argv[3]     template = sys.argv[4]     subject = sys.argv[5]     date = sys.argv[6]      exit(sendmail(firm, fromEmail, to, template, subject, date)) 

Output

> Traceback (most recent call last):    > File "C:\Documents and Settings\Administrator\Plocha\Newsletter-build-desktop\sendmail.py", > line 69, in  >     exit(sendmail(firm, fromEmail, to, template, subject, date))    > > File "C:\Documents and Settings\Administrator\Plocha\Newsletter-build-desktop\sendmail.py", > line 45, in sendmail >     raise ex > >   File "C:\Documents and Settings\Administrator\Plocha\Newsletter-build-desktop\sendmail.py", > line 39, in sendmail >     server.sendmail(fromEmail, [to], msg.as_string()) > > File "C:\Python32\lib\smtplib.py", > line 716, in sendmail >     msg = _fix_eols(msg).encode('ascii') UnicodeEncodeError: 'ascii' codec > > can't encode character '\u011b' in > position 385: ordinal not in > range(128) 

回答1:

You should just add 'utf-8' argument to your MIMEText calls (it assumes 'us-ascii' by default).

For example:



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!