如何转发当前消息?

时间:2016-06-10 19:21:55

标签: c# visual-studio outlook outlook-addin

我正在开发一个Outlook实用程序,将当前打开的邮件转发到预设地址。

这可以通过宏来完成,但它们不容易部署到用户群。

我已经通过Visual Studio功能区设计为加载项创建了UI。我在功能区上有一个按钮用于此过程。

我正在尝试按照此处所述的按钮操作:forwarding MailItem Outlook Addinn issue

如何转发当前选择?

namespace OutlookAddIn2
{
public partial class Ribbon1
{
    private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
    {
    }
    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        sendMail();
    }
    private void sendMail(Outlook.MailItem mail)
    {

        Outlook.Application Application = Globals.ThisAddIn.Application;
        Outlook.MailItem newmail =     Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
        newmail = mail.Forward();
        newmail.Recipients.Add("____@example.com");
        newmail.Send();
    }
}
}

2 个答案:

答案 0 :(得分:1)

首先,如果您开发加载项,则无需创建新的Outlook应用程序实例。相反,您需要使用可在任何地方使用的Application属性。有关详细信息,请参阅Global Access to Objects in Office Projects

如果您处理检查员窗口,您可以使用以下一系列调用:

 Application.ActiveInspector().CurrentItem 

其中ActiveInspector方法返回桌面上最顶层的Inspector对象。使用此方法可以访问用户最有可能查看的Inspector对象。例如:

Sub CloseItem() 
  Dim myinspector As Outlook.Inspector 
  Dim myItem As Outlook.MailItem 
  Set myinspector = Application.ActiveInspector 
  Set myItem = myinspector.CurrentItem 
  myItem.Close olSave 
End Sub 

但是如果您需要在资源管理器窗口中获取当前选定的项目,则可以使用以下序列:

Application.ActiveExplorer().Selection[1]

其中ActiveExplorer方法返回桌面上最顶层的Explorer对象。此方法对于确定何时没有活动资源管理器也很有用,因此可以打开一个新资源。

答案 1 :(得分:0)

在Excel工作簿中执行的上述代码CloseItem()呈现运行时错误438,对象不支持此属性或方法。我怀疑这是因为没有对创建的Outlook对象模型的正确引用。

我在Wedge发布的代码中找到了一个解决方案:Edit an open email from excel

我出于与上述相同的目的实施了该解决方案。

调整后的代码如下:

Sub CloseItemEdit()

Dim outlookApp As Outlook.Application
Set outlookApp = New Outlook.Application
Dim outlookInspector As Outlook.Inspector
Dim outlookMail As Outlook.MailItem
Set outlookInspector = outlookApp.ActiveInspector

If Not outlookInspector Is Nothing Then
    If TypeOf outlookInspector.CurrentItem Is Outlook.MailItem Then
        Set outlookMail = outlookInspector.CurrentItem

    outlookMail.Close olSave

    End If

End If

'Source: https://stackoverflow.com/questions/52596796/edit-an-open-email-from-excel

End Sub