zoukankan      html  css  js  c++  java
  • 使用脚本下载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

  • 相关阅读:
    linux下修改MAC地址方法
    自定义VBS脚本(统计在指定文件中搜索字符串出现的次数)
    mysql 1053错误,无法启动的解决方法
    VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)
    在命令提示符下,怎么查看windows开启了哪些服务?
    vbs 读取txt是读取特定的行
    Windows XP SP3中远程桌面实现多用户登陆
    Linux关机命令详解
    VBS 读取文本文件特殊字符前如逗号的值并赋值给变量
    VBS基础篇
  • 原文地址:https://www.cnblogs.com/darkmatter/p/3606811.html
Copyright © 2011-2022 走看看