在 Python 中的 Outlook 中获取有关回复/转发邮件的父电子邮件的详细信息



在Python中,我尝试在OUTLOOK中获取带有该邮件的父母主题的'Sent Items'。使用win32com.client. 如果发送的邮件是回复邮件或转发邮件,则表示我想要以下,

inbox = folder.Folders.Item("Sent Items")
inbox_messages = inbox.Items
for msg in inbox_messages:
print(msg.Subject)

我得到以下输出:

Re: This is replied Email (some this edited)

实际上,我想打印原始父邮件的主题。这是

This is replied Email

即使是编辑或更新的主题,也要原始的。请给出一些示例代码。

您可以使用Outlook中的对话导航到原始电子邮件,并从第一封电子邮件中获取原始主题行。除此之外,Outlook对象模型不提供任何东西。您可以尝试使用Outlook所基于的低级API - Extended MAPI或任何围绕该API的第三方包装器,例如Redemption。在这种情况下,您可能会得到PR_NORMALIZED_SUBJECT属性值,其中包含删除任何前缀的消息主题。

MailItem。GetConversation方法获取一个Conversation对象,该对象表示该项所属的会话。下面是c#的示例代码(Outlook对象模型在所有编程语言中都很常见):

void DemoConversation() 
{ 
object selectedItem = 
Application.ActiveExplorer().Selection[1]; 
// This example uses only 
// MailItem. Other item types such as 
// MeetingItem and PostItem can participate 
// in the conversation. 
if (selectedItem is Outlook.MailItem) 
{ 
// Cast selectedItem to MailItem. 
Outlook.MailItem mailItem = 
selectedItem as Outlook.MailItem; 
// Determine the store of the mail item. 
Outlook.Folder folder = mailItem.Parent 
as Outlook.Folder; 
Outlook.Store store = folder.Store; 
if (store.IsConversationEnabled == true) 
{ 
// Obtain a Conversation object. 
Outlook.Conversation conv = 
mailItem.GetConversation(); 
// Check for null Conversation. 
if (conv != null) 
{ 
// Obtain Table that contains rows 
// for each item in the conversation. 
Outlook.Table table = conv.GetTable(); 
Debug.WriteLine("Conversation Items Count: " + 
table.GetRowCount().ToString()); 
Debug.WriteLine("Conversation Items from Table:"); 
while (!table.EndOfTable) 
{ 
Outlook.Row nextRow = table.GetNextRow(); 
Debug.WriteLine(nextRow["Subject"] 
+ " Modified: " 
+ nextRow["LastModificationTime"]); 
} 
Debug.WriteLine("Conversation Items from Root:"); 
// Obtain root items and enumerate the conversation. 
Outlook.SimpleItems simpleItems 
= conv.GetRootItems(); 
foreach (object item in simpleItems) 
{ 
// In this example, enumerate only MailItem type. 
// Other types such as PostItem or MeetingItem 
// can appear in the conversation. 
if (item is Outlook.MailItem) 
{ 
Outlook.MailItem mail = item 
as Outlook.MailItem; 
Outlook.Folder inFolder = 
mail.Parent as Outlook.Folder; 
string msg = mail.Subject 
+ " in folder " + inFolder.Name; 
Debug.WriteLine(msg); 
} 
// Call EnumerateConversation 
// to access child nodes of root items. 
EnumerateConversation(item, conv); 
} 
} 
} 
} 
} 


void EnumerateConversation(object item, 
Outlook.Conversation conversation) 
{ 
Outlook.SimpleItems items = 
conversation.GetChildren(item); 
if (items.Count > 0) 
{ 
foreach (object myItem in items) 
{ 
// In this example, enumerate only MailItem type. 
// Other types such as PostItem or MeetingItem 
// can appear in the conversation. 
if (myItem is Outlook.MailItem) 
{ 
Outlook.MailItem mailItem = 
myItem as Outlook.MailItem; 
Outlook.Folder inFolder = 
mailItem.Parent as Outlook.Folder; 
string msg = mailItem.Subject 
+ " in folder " + inFolder.Name; 
Debug.WriteLine(msg); 
} 
// Continue recursion. 
EnumerateConversation(myItem, conversation); 
} 
} 
} 

相关内容

最新更新