• 使用脚本下载Gmail邮件附件


    以下脚本连接上我的Gmail帐号,将收件箱中2013年1月份的新语丝邮件的附件保存在当前目录的xys文件夹中。

    import imaplib
    import email
    import os
    dir_name = 'archive'
    if not os.path.exists(dir_name):
        os.mkdir(dir_name)
    save_path = os.path.join(os.getcwd(),dir_name)
    M = imaplib.IMAP4_SSL('imap.gmail.com')
    M.login('leetschau@gmail.com', 'vim72python251')
    M.select() # default value is inbox
    search_criteria = '(From "Shi-min Fang" UNSEEN)'
    # '(From "Shi-min Fang" SINCE "01-Jan-2013" BEFORE "01-FEB-2013")'
    res, search_result = M.search(None, search_criteria)
    for num in search_result[0].split():
        typ, data = M.fetch(num, '(RFC822)')
        # print 'Message %s
    %s
    ' % (num, data[0][1])
        email_body = data[0][1]
        mail = email.message_from_string(email_body)
        sender = mail['From']
        subject = mail['Subject']
        print "["+mail["From"]+"]: " + mail["Subject"]
        for part in mail.walk():
            if part.get_content_maintype() == 'multipart':
                continue
            if part.get('Content-Disposition') is None:
                continue
            filename = subject+'.txt'
            att_path = os.path.join(save_path, filename)
            if not os.path.isfile(att_path) :
                fp = open(att_path, 'wb')
                fp.write(part.get_payload(decode=True))
                fp.close()
    M.close()
    M.logout()
    

    说明:

    1. 附件保存的名字和扩展名是写死的,有兴趣的话可以研究一下怎样获得附件本身的文件名;

    2. 这个脚本的强大之处在于它不需要任何第三方库,只用python内置的imaplib,只用是支持imap的邮箱都可以用这个方法处理邮件;

    3. 这里面最有用的是邮件搜索规则(search_criteria),格式是(key1 value1 key2 value2 ...),每个value上加引号,整个表达式是一个字符串,因此也要加引号。

    key除了这里的收件人、起始/终止日期,还有ALL(全部邮件),UNSEEN(未读邮件),DELETED(已删除邮件)等,key-value对之间可以随意组合;

    1. M的select方法默认值是收件箱,可以指定其他信箱,完整格式是:IMAP4.select([mailbox[, readonly]]);

    参考1:http://stackoverflow.com/questions/6225763/downloading-multiple-attachments-using-imaplib

    参考2:Python 2.7.3 chapter 20.10 imaplib -> 20.10.2: IMAP4 Example

  • 相关阅读:
    《数据库系统概论》第三章笔记
    《数据库系统概论》第二章笔记
    《数据库系统概论》第一章笔记
    《Java并发编程的艺术》第九章笔记
    Dijkstra算法
    LaTex插图总结
    PDF中点击参考文献如何回到正文
    清华大学SCI论文写作心得
    LaTex写论文
    MATLAB中ode23函数,龙格库塔函数
  • 原文地址:https://www.cnblogs.com/darkmatter/p/3606811.html
Copyright © 2020-2023  润新知