Exchangelib:ItemAttachment 似乎从附件名称中删除了文件扩展名

Exchangelib: ItemAttachment appears to strip file extension from the attachment name

在尝试处理入站电子邮件中类型为 ItemAttachment 和 FileAttachment 的几个附件时,我注意到 ItemAttachment(代表电子邮件附件“HELLO WORLD.eml”)从名称中删除了扩展名 .eml。所以我在流程的下游丢失了该信息。

FileAttachment 类型的其他类型的附件都很好,并保留其扩展名。不确定我是否遗漏了某些东西或者 ItemAttachment 的初始化方式存在缺陷。想法?

注意 1:这些附件是即时的,例如:attachments = message_item.attachments

注2:exchangelib==3.2.0

** ATTACHMENT 1

   NAME: HELLO WORLD,                         <== Supposed to have .eml extension

   TYPE: <class 'exchangelib.attachments.ItemAttachment'>

   content_type='message/rfc822', 
   content_id='742A502EB7681B4F8D08B03020716918@namprd10.prod.outlook.com',
   size=31367, 
   last_modified_time=EWSDateTime(2020, 7, 20, 22, 25, 2, tzinfo=<UTC>), 
   is_inline=False

** ATTACHMENT 2

   NAME: Daily Sync-up call.ics

   TYPE: <class 'exchangelib.attachments.FileAttachment'>: 

   content_type='text/calendar',
   content_id='AF02FF7A060C5F4BA45628DE091DF5CD@namprd10.prod.outlook.com', 
   size=76875, 
   last_modified_time=EWSDateTime(2020, 7, 20, 22, 25, 2, tzinfo=<UTC>), 
   is_inline=False, 
   is_contact_photo=False)

(部分内容已编辑)

EWS 中的项目附件的不同之处在于它们实际上不是文件,而是对 Exchange 数据库中其他项目的引用。因此,您可能会在例如中看到的 .ics 扩展名Outlook 是一个 .eml 文件,Outlook 从引用的项目创建并提供下载。但是EWS并不知道。

在 exchangelib 中,ItemAttachment.item 是一个普通的 Item,您可以直接使用它。如果您需要附件,您可以根据项目附件中包含的信息创建一个 .eml 文件,但您必须自己创建或使用图书馆来帮助您。

考虑到我的问题已接受的答案,为了解决我在使用 ItemAttachment 时丢失的 .eml 扩展名,我采用了如下显式重命名方案:

if isinstance(a, ItemAttachment):
    attach_name = a.name
    regex_pat = re.compile(r'.*\.eml$')  # regex for explicit .eml extension

    if not regex_pat.match(a.name) and a.content_type == "message/rfc822":
        attach_name += ".eml"
    attachment_file = ContentFile(a.item.mime_content, name=attach_name)

一个明显的问题是我假设“message/rfc822”类型文件的扩展名为 .eml 而不是其他。但这适用于我在我的环境中的目的,作为恢复丢失的 .eml 扩展名的解决方法。将此方法留在此处 compare/contrast 以防有人遇到此问题。