outlook.MAPIFolder selectedFolder = m_applicationObject.ActiveExplorer().CurrentFolder;
string expMessage = "Your current folder is " + selectedFolder.Name + ".\n";
string itemMessage = "Item is unknown.";
try
{
if (m_applicationObject.ActiveExplorer().Selection.Count > 0)
{
Object selObject = m_applicationObject.ActiveExplorer().Selection[1];
if (selObject is outlook.MailItem)
{
outlook.MailItem mailItem = (selObject as outlook.MailItem);
itemMessage = " The subject is " + mailItem.Subject + ". \n";
itemMessage += " The Email is " + getSenderEmailAddress(mailItem) + ".\n";
itemMessage += " The name is " + mailItem.SenderName + ".\n";
itemMessage += " The Desc is " + mailItem.Body + ".\n";
//body consist of too many emails and its replies. is there any way i can extract latest email content from mailitem.Body
// mailItem.Display(false);
}
}
}
在上面的代码中,我正在从Outlook插件中提取电子邮件详细信息
正文包含太多电子邮件及其回复。有什么方法可以从mailitem.Body
答案 0 :(得分:0)
Outlook对象模型不提供任何可用的东西。没有简单而简单的方法来提取邮件正文以获取最新回复。
但是,您可以使用以下方法提取最新的答复。
Conversation
对象,该对象代表该项目所属的会话,例如: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);
}
}
}
Outlook电子邮件签名文件所在的默认文件夹为:
C:\Documents and Settings\%username%\Application Data\Microsoft\Signatures
C:\Users\%username%\AppData\Roaming\Microsoft\Signatures
答案 1 :(得分:0)
此问题的回答有几种类型,例如-Only get the latest reply text in an Outlook Email using VSTO and C#。
即使从理论上讲,您也无法做到这一点:假设用户在邮件顶部键入内容(例如“请参阅下文”),然后在下方的邮件正文中插入/删除各种内容(我一直都这样做)。如果字体颜色不同,您会很幸运。
您可以尝试将原始版本与新版本进行比较,并找出差异(请参见上面的链接)。