在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);
}
}
}