Отправка писем из Outlook с неработающим Python - PullRequest
0 голосов
/ 07 октября 2019

Некоторое время я запускал некоторый код, который автоматизирует некоторые электронные письма, используя win32com.client. Все работало месяцами, но сегодня я получаю сообщение об ошибке.

import win32com.client

olMailItem = 0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)

Сегодня я получаю сообщение об ошибке AttributeError: module 'win32com.gen_py.00062FFF-0000-0000-C000-000000000046x0x9x6' has no attribute 'CLSIDToPackageMap'

Если я пытаюсь использовать «Excel.Application» или «Word.Application»"тогда я не получаю сообщение об ошибке, и Outlook установлен и работает в моей системе. На прошлой неделе я столкнулся с проблемой, когда mail.Bcc и mail.HTMLbody сменились на mail.BCC и mail.HTMLBody соответственно, но я не обнаружил, что изменение строки помогло.

Может кто-нибудь сбросить любойсвет на то, что может происходить?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 октября 2019

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

# If errors are found, do this
# clear contents of C:\Users\<username>\AppData\Local\Temp\gen_py
# that should fix it, to test it type
import win32com.client
app = win32com.client.gencache.EnsureDispatch("Outlook.Application")
app.Visible = True

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

1.)

from pathlib import Path
 try:
        xl = win32.gencache.EnsureDispatch('Excel.Application')
    except AttributeError:
        f_loc = r'C:\Users\<username>\AppData\Local\Temp\gen_py'
        for f in Path(f_loc):
            Path.unlink(f)
        Path.rmdir(f_loc)
        xl = win32.gencache.EnsureDispatch('Excel.Application')

2.)

try:
    xl = client.gencache.EnsureDispatch('Excel.Application')
except AttributeError:
    # Corner case dependencies.
    import os
    import re
    import sys
    import shutil
    # Remove cache and try again.
    MODULE_LIST = [m.__name__ for m in sys.modules.values()]
    for module in MODULE_LIST:
        if re.match(r'win32com\.gen_py\..+', module):
            del sys.modules[module]
    shutil.rmtree(os.path.join(os.environ.get('LOCALAPPDATA'), 'Temp', 'gen_py'))
    from win32com import client
    xl = client.gencache.EnsureDispatch('Excel.Application')
...