【问题标题】:Download attachment from Outlook using Python使用 Python 从 Outlook 下载附件
【发布时间】:2018-10-25 17:55:10
【问题描述】:

我正在尝试使用 Python 从 Outlook 下载附件,到目前为止,我可以按主题行下载附件,但在我的情况下,我想从多个电子邮件中下载多个附件,其中主题行以某个字符串开头,例如: 主题是:Query 123654、Query 56975、Query 5698 像这样,我想下载所有主题名称以“Query”开头的主题。 我当前的代码如下:

from win32com.client import Dispatch
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
val_date = datetime.date.today()

sub_today = 'Query 123654'
att_today = ''
for msg in all_inbox:
    if msg.Subject == sub_today and msg.Senton.date() == val_date:
        break

for att in msg.Attachments:
    if att.FileName == att_today:
        break

try:
    att.SaveAsFile('C:\\Offline Feeds\\Attachments' + '\\'+ att.FileName)
    messagebox.showinfo("SUCCESSFUL","Attachments Downloaded")
except:
    messagebox.showerror("ERROR","Attachment Download Failed")

【问题讨论】:

    标签: python python-3.x outlook win32com


    【解决方案1】:

    您可以使用 find() 来搜索特定数据。

    sub_today = 'Query'
    
    if msg.Subject.find(sub_today) != -1 break
    

    如果主题不包含“Query”,则返回“-1”。

    这是完整的代码:

    from win32com.client import Dispatch
    outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder("6")
    all_inbox = inbox.Items
    val_date = datetime.date.today()
    
    sub_today = 'Query'
    att_today = ''
    for msg in all_inbox:
        if msg.Subject.find(sub_today) != -1 and msg.Senton.date() == val_date:
            break
    
    for att in msg.Attachments:
        if att.FileName == att_today:
            break
    
    try:
        att.SaveAsFile('C:\\Offline Feeds\\Attachments' + '\\'+ att.FileName)
        messagebox.showinfo("SUCCESSFUL","Attachments Downloaded")
    except:
        messagebox.showerror("ERROR","Attachment Download Failed")
    

    更多信息,请参考此链接:

    Python String find() Method

    【讨论】:

    • 感谢@Alina Li 的修改,但如果 msg.Subject.find(sub_today) != -1 和 msg.Senton.date() == val_date: 没有按预期工作(下载所有附件以“查询”开头),而是仅下载多封电子邮件中最先发送的电子邮件附件。
    • 你可以试试 search_result = msg.Subject.find(sub_today) if msg.Senton.date() == val_date and search_result != -1: break
    • 此代码不起作用并引发错误“AttributeError: .Senton” 我什至尝试过“如果 msg.Subject 和 msg.Senton.date() 中的 sub_today == val_date: break”但它下载第一封电子邮件的附件并不是全部。我什至尝试了嵌套的 for 循环多次运行它,但没有改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多