我有一个小的 python 脚本,可以从 POP 邮件地址提取电子邮件并将它们转储到一个文件中(一个文件一个电子邮件)
然后 PHP 脚本运行文件并显示它们。
我遇到了 ISO-8859-1 (Latin-1) 编码电子邮件的问题
这是我得到的文本示例:=?iso-8859-1?Q?G=EDsli_Karlsson?= and Sj=E1um hva=F0 =F3li er kl=E1r J
我提取电子邮件的方式是这段代码。
pop = poplib.POP3(server)
mail_list = pop.list()[1]
for m in mail_list:
mno, size = m.split()
lines = pop.retr(mno)[1]
file = StringIO.StringIO("\r\n".join(lines))
msg = rfc822.Message(file)
body = file.readlines()
f = open(str(random.randint(1,100)) + ".email", "w")
f.write(msg["From"] + "\n")
f.write(msg["Subject"] + "\n")
f.write(msg["Date"] + "\n")
for b in body:
f.write(b)
我已经在 python 和 php 中尝试了可能的所有编码/解码组合。
请您参考如下方法:
您可以使用 python 电子邮件库 (python 2.5+) 来避免这些问题:
import email
import poplib
import random
from cStringIO import StringIO
from email.generator import Generator
pop = poplib.POP3(server)
mail_count = len(pop.list()[1])
for message_num in xrange(mail_count):
message = "\r\n".join(pop.retr(message_num)[1])
message = email.message_from_string(message)
out_file = StringIO()
message_gen = Generator(out_file, mangle_from_=False, maxheaderlen=60)
message_gen.flatten(message)
message_text = out_file.getvalue()
filename = "%s.email" % random.randint(1,100)
email_file = open(filename, "w")
email_file.write(message_text)
email_file.close()
此代码将从您的服务器获取所有消息并将它们转换为 Python 消息对象,然后再次将它们扁平化为字符串以写入文件。通过使用 Python 标准库中的电子邮件包,应该可以为您处理 MIME 编码和解码问题。
免责声明:我没有测试该代码,但它应该可以正常工作。
