获取.msg文件的附件哈希值

时间:2015-06-22 18:31:36

标签: python outlook

现在,我的代码执行以下操作

  1. 从收件箱中获取电子邮件
  2. 下载电子邮件
  3. 浏览下载的每封电子邮件,并提取附件
  4. 保存附件
  5. 获取已保存文件的哈希值
  6. 但是,不是保存附件,是否可以只获取附件的哈希值,并跳过保存?

    attachments = message.Attachments
    for attachment in attachments:
        if attachment.FileName.endswith(".msg"):
            attachment.SaveASFile(
                os.path.dirname(os.path.abspath(__file__)) + '/attachments/' + str(
                    time.time()) + "-" + message.subject + "-" + attachment.FileName)
    

    编辑:

    这是我尝试过的:

    def get_attachments(message):
        attachments = message.Attachments
        for attachment in attachments:
            data_array = message.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37010102")
            print len(data_array)
    

    这是我得到的错误:

    pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, u'Microsoft Outlook', u'The property "http://schemas.microsoft.com/mapi/proptag/0x37010102" is unknown or cannot be found.', None, 0, -2147221233), None)
    
    Process finished with exit code 1
    

2 个答案:

答案 0 :(得分:0)

是的,有可能。您需要使用Attachment类的PropertyAccessor属性来获取相应类的实例。它返回一个PropertyAccessor对象,该对象支持创建,获取,设置和删除父Attachment对象的属性。因此,您可以使用PropertyAccessor类的GetProperty方法获取PR_ATTACH_DATA_BIN属性的值(DASL名称为http://schemas.microsoft.com/mapi/proptag/0x37010102),该属性返回表示附加文件的字节数组。

答案 1 :(得分:0)

PR_ATTACH_DATA_BIN仅适用于常规按值附件。嵌入式邮件或OLE附件没有该属性。确保Attachment.Type属性== 1(OlAttachmentType.olByValue)。

如果是嵌入式邮件附件,您可以将其保存为临时MSG文件并计算其哈希值,但请注意,MSG文件将包含日期/时间戳,这将导致每次都有新的哈希值MSG文件已保存。