python win32com outlook, не могу получить информацию об отправителе. - PullRequest
0 голосов
/ 03 мая 2018

Я использую win32com.client для взаимодействия с Outlook. Мне удалось получить текст и тему сообщений.

Я основал свой код на следующем посте: Четко документированное чтение функций электронной почты с python win32com outlook

Как только я смогу получить только body и subject, все остальное вернет <COMObject <unknown>> или следующую ошибку.

Traceback (most recent call last):
  File "C:/Users/xx/PycharmProjects/email_crawler/email_crawler.py", line 62, in <module>
    main()
  File "C:/Users/xx/PycharmProjects/email_crawler/email_crawler.py", line 56, in main
    retrieve_messages(outlook)
  File "C:/Users/xx/PycharmProjects/email_crawler/email_crawler.py", line 51, in retrieve_messages
    print(message.Sender)
  File "C:\Users\xx\PycharmProjects\email_crawler\venv\lib\site-packages\win32com\client\dynamic.py", line 527, in __getattr__
    raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.Sender

Вот мой код.

def get_outlook():
        """
        :return: creates an instance of outlook and returns it.
        """
        outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
        return outlook


def retrieve_messages(outlook):
    """
    Retrieves messages from the inbox and returns a list.
    :param outlook: Instance of an outlook account
    :return:
    """
    inbox = outlook.GetDefaultFolder(6)
    messages = inbox.Items
    for message in messages:
        print(message.Sender)


def main():
    outlook = get_outlook()
    retrieve_messages(outlook)


if __name__ == "__main__":
main()

1 Ответ

0 голосов
/ 03 мая 2018

Отправитель действительно COM-объект, а не строка. Он имеет такие свойства, как Name и Address. Помните, что не все элементы в папке «Входящие» являются объектами MailItem - вы также можете иметь объекты MeetingItem и ReportItem. Если вам нужны только MailItem объекты, проверьте, что Class property = 43 (OlObjectClass.olMail)

...