python-2.7 - python poplib获取附件

标签 python-2.7 poplib

我正在尝试访问POP3电子邮件服务器。我将轮询消息并为每个消息下载附件。我可以成功登录并获取消息,但无法弄清楚如何实际获取附件,稍后我将需要解析该附件。
我想我可以保存到tmp dir直到我处理它。

这是到目前为止我得到的:

pop = poplib.POP3_SSL(server)
pop.user(usr)
pop.pass_(pwd)

f = open(file_dir, 'w')
num_msgs = len(pop.list()[1])
for msg_list in range(num_msgs):
    for msg in pop.retr(msg_list+1)[1]:
        mail = email.message_from_string(msg)
        for part in mail.walk():
            f.write(part.get_payload(decode=True))
f.close()

这是我从网上找到的示例中拼凑而成的代码,但没有实际获取附件的可靠示例。我正在写入的文件为空。
我在这里想念什么?

最佳答案

请在下面查看完整的示例。

导入poplib和解析器
import poplib from email import parser
将连接返回到弹出服务器的函数:

def mail_connection(server='pop.mymailserver.com'):
    pop_conn = poplib.POP3(server)
    pop_conn.user('someuser@server')
    pop_conn.pass_('password')
    return pop_conn

提取邮件的功能:
def fetch_mail(delete_after=False):
    pop_conn = mail_connection() 
    messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
    messages = ["\n".join(mssg[1]) for mssg in messages]
    messages = [parser.Parser().parsestr(mssg) for mssg in messages]
    if delete_after == True:
        delete_messages = [pop_conn.dele(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
    pop_conn.quit()
    return messages

然后是将附件另存为文件的功能。注意,allowed mimetypes;您可以列出其中的一个,例如:
allowed_mimetypes = ["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]

等等。
def get_attachments():
    messages = fetch_mail()
    attachments = []
    for msg in messages:
        for part in msg.walk():
            if part.get_content_type() in allowed_mimetypes:
                name = part.get_filename()
                data = part.get_payload(decode=True)
                f = file(name,'wb')
                f.write(data)
                f.close()
                attachments.append(name)
    return attachments

关于python-2.7 - python poplib获取附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541271/

相关文章:

python - 在字典中压缩两个列表,但在键中保留重复项

python-2.7 - 在 NLTK Python 中使用斯坦福 POS 标记器时出错

python - 通过 poplib 单独从收件箱中选择邮件

python - 尝试获取电子邮件 poplib 时出现错误的帮助

python - Selenium 和 phantomjs 不打开 javascript 页面

Python + WSGI - 无法从目录导入我自己的模块?

python - 如何比较两个文件并在 python 中打印不匹配的行号?

python - 电子邮件中的尾随等号 (=)

python-3.x - Python 3 - 如何仅提取电子邮件正文

python - Poplib 无法正常工作?