Скачать вложения из Outlook, используя скрипт Pythin - PullRequest
0 голосов
/ 03 ноября 2019

Теперь я написал код, чтобы запускать его каждый день, чтобы получать вложения из вчерашних писем. когда я запускаю его, вложение не загружается, и вместо этого я получаю файл с именем "@".

ниже указан код:

import win32com.client
import os
from datetime import datetime, date, time, timedelta

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6).Folders.Item("Inbox Subfolder Name") 
messages = inbox.Items
message = messages.GetFirst()
subject = message.Subject

# Get yesterdays date for the purpose of getting emails from this date
d = (date.today() - timedelta (days=1)).strftime("%y-%m-%d")
yesterdaydate=("20"+d)
print yesterdaydate

get_path_clt1 = "Folder Location" + yesterdaydate+"\\"

if os.path.exists(get_path_clt1):
    print " File Exists"
else:
    os.mkdir(get_path_clt1)


for m in messages:
    date = str(m.senton)
    date_time_obj = datetime.strptime(date,'%m/%d/%y %H:%M:%S')
    messagedate=date_time_obj.date()

    if str(yesterdaydate) == str(messagedate) and (m.Subject == "Subject Name to compare") :
        print (message)
        print (messagedate)
        attachments = message.Attachments
        num_attach = len([x for x in attachments])
        print("test-1")
        for x in range(1, num_attach+1):
            print("test-in-1")
            attachment = attachments.Item(x)
            attachment.SaveAsFile(os.path.join(get_path_clt1,attachment.FileName))
            print (attachment)
            print ("---------------------")
            break
        message = messages.GetNext()

    else:
        message = messages.GetNext()

1 Ответ

0 голосов
/ 04 ноября 2019

Прежде всего, нет необходимости перебирать все вложения, чтобы получить число:

 num_attach = len([x for x in attachments])

Вместо этого вы можете использовать свойство Attachments.Count , которое возвращает целое числос указанием количества объектов в указанной коллекции.

Во-вторых, убедитесь, что вы указали правильное имя файла:

 attachment.SaveAsFile(os.path.join(get_path_clt1,attachment.FileName))

Я бы предложил проверить значение attachment.FileName до или создатьown.

Наконец, вы можете проверить свойство Attachment.Type , которое возвращает константу OlAttachmentType, указывающую тип указанного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...