在我的Outlook插件中我想在功能区上添加一个按钮,所以当用户点击此按钮我想要检索当前所选电子邮件的正文时,我有这个代码,但它只检索收件箱中的第一封电子邮件,因为索引是1:
Microsoft.Office.Interop.Outlook.Application myApp = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
Microsoft.Office.Interop.Outlook.MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
String body = ((Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[1]).Body;
那么如何在outlook中检索当前打开的电子邮件? ,这种方法对我有用,但我需要获取当前电子邮件的索引。
感谢。
答案 0 :(得分:7)
每次都不应初始化新的Outlook.Application()
实例。大多数加载项框架通常通过名为Outlook.Application
的字段或属性为您提供与当前Outlook会话相对应的Application
实例。您应该在加载项的生命周期内使用它。
要获取当前所选项目,请使用:
Outlook.Explorer explorer = this.Application.ActiveExplorer();
Outlook.Selection selection = explorer.Selection;
if (selection.Count > 0) // Check that selection is not empty.
{
object selectedItem = selection[1]; // Index is one-based.
Outlook.MailItem mailItem = selectedItem as Outlook.MailItem;
if (mailItem != null) // Check that selected item is a message.
{
// Process mail item here.
}
}
请注意,上面的内容可让您处理第一个所选项目。如果您选择了多个项目,则可能需要循环处理它们。
答案 1 :(得分:6)
On Top添加对
的引用using Outlook = Microsoft.Office.Interop.Outlook;
然后在方法内;
Outlook._Application oApp = new Outlook.Application();
if (oApp.ActiveExplorer().Selection.Count > 0)
{
Object selObject = oApp.ActiveExplorer().Selection[1];
if (selObject is Outlook.MailItem)
{
Outlook.MailItem mailItem = (selObject as Outlook.MailItem);
String htmlBody = mailItem.HTMLBody;
String Body = mailItem.Body;
}
}
此外,您可以在查看邮件之前更改将在Outlook中显示的正文。