当前位置: 首页 > 面试题库 >

Python 3 smtplib使用Unicode字符发送

申博厚
2023-03-14
问题内容

我在使用Python 3中的smtplib向unicode字符发送电子邮件时遇到问题,这在3.1.1中失败,但在2.5.4中有效:

  import smtplib
  from email.mime.text import MIMEText

  sender = to = 'ABC@DEF.com'
  server = 'smtp.DEF.com'
  msg = MIMEText('€10')
  msg['Subject'] = 'Hello'
  msg['From'] = sender
  msg['To'] = to
  s = smtplib.SMTP(server)
  s.sendmail(sender, [to], msg.as_string())
  s.quit()

我尝试了文档中的示例,但也失败了。 http://docs.python.org/3.1/library/email-
examples.html
,以MIME消息示例的形式发送目录的内容

有什么建议?


问题答案:

关键在docs中:

class email.mime.text.MIMEText(_text, _subtype='plain', _charset='us-ascii')

MIMEText类是MIMENonMultipart的子类,用于创建主要类型文本的MIME对象。_text是有效负载的字符串。_subtype是次要类型,默认为纯文本。_charset是文本的字符集,并作为参数传递给MIMENonMultipart构造函数;它默认为us-
ascii。对文本数据不进行任何猜测或编码。

因此,您需要的显然 不是 msg = MIMEText('€10'),而是:

msg = MIMEText('€10'.encode('utf-8'), _charset='utf-8')

尽管没有全部清楚地记录下来,但是sendmail需要一个字节字符串,而不是Unicode字符串(这是SMTP协议指定的);查看msg.as_string()两种构建方式的外观-
给定“无猜测或编码”,您的方式中仍然有欧元字符(并且sendmail无法将其转换为字节串),我的没有’t(整个utf-8均已明确指定)。



 类似资料:
  • 抱歉,目前我尚未完成这个主题,请稍后再来。 (译注:C++对unicode的支持不是特别重视)

  • 以下是在java中使用正则表达式的Boundary Matchers的各种示例。 Sr.No 构造和匹配 1 ^ 一行的开头。 2 $ 一行的结尾。 3 \b 一个单词边界。 4 \B 非字边界。 5 \A 输入的开始。 6 \G 上一场比赛结束。 7 \Z 输入结束但是对于最终终止符,如果有的话。 8 \z 输入结束。

  • 以下是使用java中的正则表达式匹配Unicode字符类的各种示例。 Sr.No 构造和匹配 1 \p{IsLatin} 拉丁文字符。 2 \p{InGreek} 希腊街区的一个角色。 3 \p{Lu} 一个大写字母。 4 \p{IsAlphabetic} 字母字符(二进制属性)。 5 \p{Sc} 货币符号。 6 \P{InGreek} 除希腊街区之外的任何角色。 7 [\p{L}&&[^\p{

  • 问题内容: 我是HTTP相关事务的新手。我的问题是在iOS开发中,我想使用HTTP标头发送字符串,因此我在使用: 接收服务器是Python(Google App Engine),使用以下命令将db模型中的字符串值保存为StringProperty: 但是,问题是当我尝试发送非英语字符串(如韩语)时,它像这样保存在HTTP标头中: 并在Google App Engine收到并保存在DataStore

  • 问题内容: 在下面查看我的代码。我有一个包含Unicode字符代码的JSON字符串。我将其转换为Java对象,然后将其转换回JSON字符串。但是,您可以看到输入和输出JSON字符串不匹配。是否可以使用Gson将我的对象转换为原始JSON字符串?我想和一样。 问题答案: 不幸的是,Gson似乎不支持它。所有JSON输入/输出分别集中在Gson(从2.8.0开始)和。可以使用其私有方法读取Unicod

  • 问题内容: 我有一个带有unicode字符的json文件,但我无法解析它。我已经在Flash CS5(JSON库)中进行了尝试,并且在http://json.parser.online.fr/中进行了尝试,但我始终会收到“意外令牌- 评估失败” 抱歉,语法确实存在问题,它是通过客户端发送的。 有人可以帮帮我吗?谢谢 问题答案: RFC: JSON文本应以Unicode编码。默认编码为UTF-8。