Объект _Folders не вызывается ", когда он вызывается и был ранее сегодня. Неработающий код. Использование win32 и outlook с python - PullRequest
1 голос
/ 04 мая 2019

Я использую win32.client и пытаюсь получить и манипулировать основным текстом электронной почты. Сегодня это работало хорошо, но я думаю, что при тестировании я мог сломать свой прогноз! Теперь кажется, что когда я пытаюсь вызвать индекс объекта _Folders, я получаю ошибку типа, которая не вызывается. Я должен использовать индексы, чтобы попасть в мои вложенные папки. До сегодняшнего вечера это работало отлично, и я не изменил ни один код. Это очень расстраивает, и я все еще плохо знаком с питоном. Любая помощь будет принята с благодарностью !!

Вот мой код:

import win32com.client
import urllib.parse
import webbrowser
from pyshorteners import Shortener

application = win32com.client.Dispatch('Outlook.Application')
namespace = application.GetNamespace('MAPI')

# 6 is the number for the main inbox
inbox_folder = namespace.GetDefaultFolder(6) 

# had to create multiple objects of subfolders to get to specific directory
inbox = inbox_folder.Folders
mobile_folder = inbox(3)
mobile_folder_directory = mobile_folder.Folders
mobile_script_folder = mobile_folder_directory(2)

# using Items method to parse specific email files within the folder
messages = inbox_folder.Items

Я получаю эту ошибку: Файл "mail1.py", строка 10, в mobile_folder = inbox_folders (3) TypeError: объект '_Folders' не вызывается

Я возился с другим кодом, который я нашел на этом сайте ранее. Я пытался отслеживать свою почту на предмет наличия новой почты (которую я до сих пор не понял).

Я выполнил часть этого кода в другом файле с некоторыми изменениями, чтобы соответствовать моим входящим почтовым ящикам

import ctypes # for the VM_QUIT to stop PumpMessage()
import pythoncom
import win32com.client
import sys


# outlook config
SHARED_MAILBOX = "Your Mailbox Name"

# get the outlook instance and inbox folder
session = win32com.client.Dispatch("Outlook.Application").Session
user = session.CreateRecipient(SHARED_MAILBOX)
shared_inbox = session.GetSharedDefaultFolder(user, 6).Items  # 6 is Inbox


class HandlerClass(object):

    def OnItemAdd(self, item):
        print("New item added in shared mailbox")
        if item.Class == 43:
            print("The item is an email!")


outlook = win32com.client.DispatchWithEvents(shared_inbox, HandlerClass)


def main():
    print("Starting up Outlook watcher")
    pythoncom.PumpMessages()


if __name__ == "__main__":
    try:
        status = main()
        sys.exit(status)
    except KeyboardInterrupt:
        print("Terminating program..")
        ctypes.windll.user32.PostQuitMessage(0)
        sys.exit()

я подозреваю, что это изменилось в версиях outlook Я очень потерян.

У меня также есть кое-что, говорящее, что объект MAPIFolder не может быть вызван ... и мое исследование показало, что это старый, неподдерживаемый протокол outlook.

Вот еще данные, когда я пытаюсь проиндексировать свои папки:

>>> inbox_folder
<win32com.gen_py.Microsoft Outlook 16.0 Object Library.MAPIFolder instance at 0x12191504>
>>> inbox = inbox_folder.Folders
>>> inbox
<win32com.gen_py.Microsoft Outlook 16.0 Object Library._Folders instance at 0x46668848>
>>> inbox(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '_Folders' object is not callable

1 Ответ

0 голосов
/ 05 мая 2019

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

Решение теперь ищется по имени папки:

inbox_folder = namespace.GetDefaultFolder(6) 

# had to create multiple objects of subfolders to get to specific directory
inbox = inbox_folder.Folders
mobile_folder = inbox["Mobile"]
mobile_script_folder = mobile_folder.Folders["Mobile_4_4_Alpha"]

не уверен, почему это исправило это, но это сделало. яй!

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