【问题标题】:How to get csv attachment from email and save it如何从电子邮件中获取 csv 附件并保存
【发布时间】:2013-09-01 02:05:33
【问题描述】:

我正在尝试从电子邮件中获取附件并将​​其保存到具有原始文件名的特定文件夹中。电子邮件非常基本,除了附件之外没有太多内容。该文件是一个 csv 文件,每封电子邮件只有一个。这是我到目前为止所拥有的,但我是新手,不知道如何继续。如果有帮助,这是使用 Outlook。任何帮助表示赞赏。

import imaplib
import email


mail=imaplib.IMAP4('mailserver.com')
mail.login("username", "password")
mail.select("DetReport")

typ, msgs = mail.uid('Search', None, '(SUBJECT "Detection")')
msgs = msgs[0].split()

for emailid in msgs:
    resp, data = mail.fetch(emailid, "(RFC822)")
    email_body = data[0][1] 
    m = email.message_from_string(email_body)


    message=m.get_content_maintype()

仅供参考,当我运行 message=m.get_content_maintype() 时,它说它是文本。

【问题讨论】:

    标签: python csv python-2.7 email-attachments imaplib


    【解决方案1】:

    我又环顾四周,又尝试了一些东西。这些: Downloading multiple attachments using imaplibHow do I download only unread attachments from a specific gmail label? 玩了一下就得到了答案。

    有效的代码:

    import imaplib
    import email
    import os
    
    svdir = 'c:/downloads'
    
    
    mail=imaplib.IMAP4('mailserver')
    mail.login("username","password")
    mail.select("DetReport")
    
    typ, msgs = mail.search(None, '(SUBJECT "Detection")')
    msgs = msgs[0].split()
    
    for emailid in msgs:
        resp, data = mail.fetch(emailid, "(RFC822)")
        email_body = data[0][1] 
        m = email.message_from_string(email_body)
    
    
        if m.get_content_maintype() != 'multipart':
        continue
    
        for part in m.walk():
            if part.get_content_maintype() == 'multipart':
                continue
            if part.get('Content-Disposition') is None:
                continue
    
            filename=part.get_filename()
            if filename is not None:
                sv_path = os.path.join(svdir, filename)
                if not os.path.isfile(sv_path):
                    print sv_path       
                    fp = open(sv_path, 'wb')
                    fp.write(part.get_payload(decode=True))
                    fp.close()
    

    POP3:

    import poplib
    import email
    
    server = poplib.POP3(pop_server)
    server.user(user)
    server.pass_(pass)
    
    # get amount of new mails and get the emails for them
    messages = [server.retr(n+1) for n in range(len(server.list()[1]))]
    
    # for every message get the second item (the message itself) and convert it to a string with \n; then create python email with the strings
    emails = [email.message_from_string('\n'.join(message[1])) for message in messages]
    
    for mail in emails:
        # check for attachment;
        for part in mail.walk():
            if not mail.is_multipart():
                continue
            if mail.get('Content-Disposition'):
                continue
            file_name = part.get_filename()
            # check if email park has filename --> attachment part
            if file_name:
                file = open(file_name,'w+')
                file.write(part.get_payload(decode=True))
                file.close()
    

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多