使用Python脚本从Outlook 2013下载附件

时间:2017-02-22 05:34:17

标签: python outlook jupyter-notebook win32com

我希望有一个python脚本来下载任何具有指定名称但任何文件格式的文件(可以是.txt,.csv,.pdf,.docx,.xlsx,.msg等) 目前,我有以下python代码从outlook 2013下载附件:

import win32com.client
from win32com.client import Dispatch
import datetime as date
import os.path

def attach(subject,name):
    outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder("6")
    all_inbox = inbox.Items
    val_date = date.date.today()
    sub_today = subject
    att_today = name
    for msg in all_inbox:
        if msg.Subject == sub_today:
             break
    for att in msg.Attachments:
        if att.FileName == att_today:
             break
    att.SaveASFile(os.getcwd() + '\\' + att.FileName)
    print "Mail Successfully Extracted"

如果我特定某种类型的附件,它可以正常工作。

attach('Hi','cr.txt')

但我想做这样的事情:

attach('Hi','cr.*')

所以它可以下载附件名称' cr'但是任何文件格式。

任何人都可以提出解决方法,这会有所帮助。

2 个答案:

答案 0 :(得分:1)

希望这会有所帮助:)

import win32com.client, datetime
from win32com.client import Dispatch
import datetime as date
import os.path

def checkTime(current_message):
    date_filter_unformated = datetime.date.today() - date.timedelta(days=7)
    date_filter = date_filter_unformated.strftime("%m/%d/%y %I:%M:%S")
    message_time = current_message.ReceivedTime
    df_list = list(date_filter)
    mt_list = list(str(message_time))
    df_month, mt_month = int(''.join([df_list[0],df_list[1]])), int(''.join([mt_list[0],mt_list[1]]))
    df_day, mt_day = int(''.join([df_list[3],df_list[4]])), int(''.join([mt_list[3],mt_list[4]]))
    df_year, mt_year = int(''.join([df_list[6],df_list[7]])), int(''.join([mt_list[6],mt_list[7]]))
    if mt_year < df_year:
        return "Old"
    elif mt_year == df_year:
        if mt_month < df_month:
            return "Old"
        elif mt_month == df_month:
            if mt_day < df_day:
                return "Old"
            else:
                CurrentMessage(current_message)
                return "Pass"
        elif mt_month > df_month:
            CurrentMessage(current_message)
            return "Pass"

def CurrentMessage(cm):
    print cm.Sender, cm.ReceivedTime


def getAttachment(msg,subject,name):
    val_date = date.date.today()
    sub_today = subject
    att_today = name#if you want to download 'test.*' then att_today='test'
    for att in msg.Attachments:
        if att.FileName.split('.')[0] == att_today:
            att.SaveASFile(os.getcwd() + '\\' + att.FileName)


def attach(subject,name):
    outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder("6")
    all_inbox = inbox.Items
    all_inbox = all_inbox.Sort("[ReceivedTime]", True)
    sub_today=subject

    for current_message in all_inbox:
        if checkTime(current_message) == "Pass" and  current_message.Subject == sub_today:
            getAttachment(current_message,subject,name)      
    print "Mail Successfully Extracted"

答案 1 :(得分:0)

在python中使用fnmatch模块,只需检查以下文件名

如果fnmatch.fnmatch(att.FileName,att_today)

用法:attach('Hi','cr。*')

模式含义 *符合所有条件 ?匹配任何单个字符 [seq]匹配seq中的任何字符 [!seq]匹配任何不在seq中的字符