从 PST 读取电子邮件时 Pywin32 出现异常 - '底层安全系统无法找到您的数字 ID 名称

Exception with Pywin32 when reading email from PST - 'Your Digital ID name cannot be found by the underlying security system

我正在尝试确定此问题的来源。绝大多数电子邮件都能够正确处理并且不会出现任何错误。我四处寻找这个错误,我看到有人对 outlook 有问题,但不仅仅是从 PST 文件中提取。

def enumerate_folders(FolderObj, mymode):

    for ChildFolder in FolderObj.Folders:
        enumerate_folders(ChildFolder, mymode)

    iterate_messages(FolderObj, mymode)


def iterate_messages(FolderObj, mymode):
    global mycounter2

    for item in FolderObj.Items:
        try:
            body_content = item.HTMLbody
            writeToFile(body_content, mypath)
            mycounter2 = mycounter2 + 1

        except AttributeError:
            pass

def writeToFile(messageHTML, path):
    global mycounter2
    filename = '\htmloutput' + str(mycounter2) + '.html'
    file = open(path + filename, "x")
    try:
        file.write(messageHTML)

    except UnicodeEncodeError:
        altText = str(messageHTML.encode('ascii', 'ignore'))
        file.write(altText)
        #print("Hit unicode error, trying alternate format at output " + str(mycounter2))


outlook.AddStore(pst)
PSTFolderObj = find_pst_folder(outlook, pst)
try:
    enumerate_folders(PSTFolderObj, whatmode)
except Exception as exc:
    print(exc)

问题与用户 Outlook 加密证书有关,与代码无关。该问题源于一位用户最近更换了计算机,并且他们的计算机上不再有用于加密电子邮件的证书。

我在自己的 Outlook 中解压缩 PST 时发现了问题所在,并收到了与我通过代码 运行 时完全相同的异常。这导致我问他们是否能够在他们自己的 Outlook 实例中打开电子邮件,但他们不能。然后他们解释说他们最近更换了计算机并且计算机上不再有他们的证书。

他们 re-added 证书并再次导出 PST 后,我们就能够 运行 通过申请成功。