Подтвердить что ты не робот

Как сохранить вложение из Outlook с помощью win32com.client в Python?

Я пытаюсь прочитать электронную почту и загрузить вложение в свою собственную папку, используя модуль win32com в Python, я остановился на получении объекта привязки:

from win32com.client import Dispatch
import datetime as date

outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
val_date = date.date.today()

sub_today = 'Hi'
att_today = 'Attachment.xlsx'
for msg in all_inbox:
    if msg.Subject == sub_today:
        break

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

att.SaveAsFile('new.xlsx')
att.ExtractFile('new.xlsx')
open(att)    
att.WriteToFile('x')

Ни одна из последних четырех строк не работает...

>>> att.ExtractFile('new.xlsx')
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.ExtractFile

>>> open(att) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, instance found

>>> att.WriteToFile('x')
 raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.WriteToFile

att.SaveAsFile('new.xlsx') не имеет ошибки, но такого файла в рабочем каталоге нет. Кажется, что строка просто игнорировалась...

Может ли кто-нибудь помочь? Спасибо заранее!

4b9b3361

Ответ 1

Просто для обновления, я решил эту проблему, потребовав как dir, так и имя файла в SaveAsFile:

att.SaveAsFile(os.getcwd() + '\\new.xlsx')

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

Кроме того, странно, вы должны поставить os.getcwd() здесь, так как Python не будет распознавать текущий исполняемый файл dir - in R, после того, как мы установим рабочий каталог с помощью getwd(), мы можем записать в любой файл на этом местоположение и др.

Приветствия,

Ответ 2

Как вы думаете, где находится текущий рабочий каталог? Я бы сказал, что вы смотрите на неправильную папку, SaveAsFile вообще работает просто отлично.

Просто передайте полный путь к SaveAsFile, который должен решить вашу проблему.

Ответ 3

В Windows 10 запуск этой программы без информации о папке сохранил файл в каталоге моих пользовательских документов (например, C:\Users {userid}\Documents)

Ответ 4

Я точно ищу этот код - большое спасибо (особенно за размещение решения). Когда я читал код, мне было интересно узнать, что должен делать "val_date = date.date.today()"?