c# - 如何从 Outlook 互操作电子邮件中获取最新电子邮件
问题描述
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
解决方案
Outlook 对象模型不提供任何开箱即用的东西。没有简单而简单的方法可以提取消息正文以获取最新回复。
但是,您可以使用以下方式提取最新回复。
- 通过对话提取每封电子邮件/回复。MailItem.GetConversation方法获取一个对象,该
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 电子邮件签名文件所在的默认文件夹是:
- 视窗XP:
C:\Documents and Settings\%username%\Application Data\Microsoft\Signatures
- Windows 10/8/7/Vista:
C:\Users\%username%\AppData\Roaming\Microsoft\Signatures
- 尝试使用正则表达式来提取第一部分。
推荐阅读
- java - 验证骰子的组合
- reactjs - React:如何在不删除所有其他道具的情况下更新数组中的项目?
- r - 值为 0 的 R 矩阵单元需要多少空间?以及如何处理大矩阵计算
- firebase - Firebase 功能在同一个项目但多个应用程序中
- javascript - 如何从 html2canvas 中提取照片?
- javascript - 如何在 MessageBox 中显示最近的消息?
- ios - 在标记顶部显示自定义视图
- sql - 如何使用 VBA MS Access 在表中插入变量
- haskell - 在内存中保存状态 [Haskell 服务器]
- docker - 由于 java.net.UnknownHostException: kubernetes.default.svc 在单节点 kubernetes 集群上的 spark-examples 作业失败