如何发送utf8电子邮件?
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 = …Run Code Online (Sandbox Code Playgroud) 是否有任何Python模块有助于解码各种形式的编码邮件标题,主要是主题,简单 - 比如说 - UTF-8字符串?
以下是我拥有的邮件文件的示例主题标题:
Subject: [ 201105311136 ]=?UTF-8?B?IMKnIDE2NSBBYnM=?=. 1 AO;
Subject: [ 201105161048 ] GewSt:=?UTF-8?B?IFdlZ2ZhbGwgZGVyIFZvcmzDpHVmaWdrZWl0?=
Subject: [ 201105191633 ]
=?UTF-8?B?IERyZWltb25hdHNmcmlzdCBmw7xyIFZlcnBmbGVndW5nc21laHJhdWZ3ZW5kdW4=?=
=?UTF-8?B?Z2VuIGVpbmVzIFNlZW1hbm5z?=
Run Code Online (Sandbox Code Playgroud)
文本 - 编码的刺痛 - 文本
文本 - 编码的字符串
text - 编码的字符串 - 编码的字符串
Encodig也可能是ISO 8859-15之类的东西.
更新1:我忘了提,我试过了email.header.decode_header
for item in message.items():
if item[0] == 'Subject':
sub = email.header.decode_header(item[1])
logging.debug( 'Subject is %s' % sub )
Run Code Online (Sandbox Code Playgroud)
这输出
DEBUG:root:Subject是[('[201101251025] ELStAM; =?UTF-8?B?IFZlcmbDvGd1bmcgdm9tIDIx?=.Januar 2011',无)]
这没有什么帮助.
更新2:感谢Ingmar Hupp的评论.
第一个示例解码为两个tupels的列表:
print decode_header("""[201105161048] GewSt:=?UTF-8?B?IFdlZ2ZhbGwgZGVyIFZvcmzDpHVmaWdrZWl0?=""")
[('[201105161048] GewSt:',None),('Wegfall der Vorl\xc3\xa4ufigkeit', 'UTF-8')]
这总是[(字符串,编码),(字符串,编码),...]所以我需要一个循环将所有[0]项连接到一个字符串或如何在一个字符串中得到它?
主题:[201101251025] ELStAM; =?UTF-8?B?IFZlcmbDvGd1bmcgdm9tIDIx?=.Januar 2011
解码不好: …
我正在编写一个使用Python发送电子邮件的程序.我从各种论坛中学到的是以下代码:
#!/usr/bin/env python
import smtplib
sender = "sachinites@gmail.com"
receivers = ["abhisheks@cse.iitb.ac.in"]
yourname = "Abhishek Sagar"
recvname = "receptionist"
sub = "Testing email"
body = "who cares"
message = "From: " + yourname + "\n"
message = message + "To: " + recvname + "\n"
message = message + "Subject: " + sub + "\n"
message = message + body
try:
print "Sending email to " + recvname + "...",
server = smtplib.SMTP('smtp.gmail.com:587')
username = 'XYZ@gmail.com'
password = '*****'
server.ehlo()
server.starttls() …Run Code Online (Sandbox Code Playgroud) 我的Python应用程序使用email.header.Header(http://docs.python.org/2/library/email.header.html)编码外发电子邮件的所有标头(包括“发件人”标头),如下所示:编码邮件Python中的主题(SMTP),带有非ASCII字符
它非常适合ASCII发送者名称,但适用于像
阿德里安·庞卡<pokemon@myservice.com>
它产生
来自:=?utf-8?q?Adrian_P = C5 = 82onka_ = 3Cpokemon = 40myservice = 2Ecom = 3E?=
不幸的是,Gmail显然不喜欢这种编码方式,因为它将发件人显示为(未知),并将整个邮件标记为垃圾邮件。
如何正确编码非ASCII发送者?