如何在没有签名的情况下从 Outlook 打印电子邮件正文 - Python

问题描述

我正在尝试解析来自 Outlook 的电子邮件。 我想打印以下内容

有什么办法可以在行间多空格之前打印出正文(通常这是签名与正文分开的方式)?

任何帮助将不胜感激!

import win32com.client
#other libraries to be used in this script
import os
from datetime import datetime,timedelta


outlook = win32com.client.dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

 
for account in mapi.Accounts:
    print(account.DeliveryStore.displayName) 
    
    
inBox = mapi.GetDefaultFolder(6)


messages = inBox.Items
messages.sort('[ReceivedTime]',True)
received_dt = datetime.Now() - timedelta(days=1)
received_dt = received_dt.strftime('%m/%d/%Y %H:%M %p')
messages = messages.Restrict("[ReceivedTime] >= '" + received_dt + "'")
messages = messages.Restrict("[SenderEmailAddress] = 'firstname.lastname@gmail.com'")
message = messages.GetFirst()

print ("Current date/time: "+ received_dt)
while message:
    print(message.Subject)
    print(message.body)
    message = messages.GetNext ()

解决方法

您可以使用正则表达式忽略三个换行符后的所有内容(段落之间通常有一两个换行符):

import re

r = re.compile(r"(.*)\n\n\n",re.MULTILINE + re.DOTALL)

# ...

while message:
    # ...
    match = r.match(message.body)
    if match:
        body_without_signature = r.match(message.body).groups(0)
    else:
        # No signature found
        body_without_signature = message.body
    print(body_without_signature)