Outlook VSTO加载项自定义规则/脚本

时间:2017-10-25 14:32:31

标签: vb.net vba outlook vsto outlook-addin

我有一个VBA脚本,我想将其变成Outlook的VSTO加载项。

在VBA中,我有一个名为

的方法
Public Sub DruckeAnhaenge(oMail As Outlook.MailItem)
当我使用“运行脚本”创建规则时弹出

然后我可以选择此方法。这就是所谓的“ThisOutlookSession.DruckeAnhaenge”。

现在我在Visual Studio中创建了一个VSTO加载项,该加载项具有完全相同的方法,但它不再显示。

从此加载项调用启动方法(使用MsgBox检查)。所以我的问题是如何将此方法作为规则/脚本获得,就像在VBA编辑器中一样?

以下是我的加载项代码。

Public Class ThisAddIn

    Private Sub ThisAddIn_Startup() Handles Me.Startup
        MsgBox("Add In wird erfolgreich ausgeführt")
    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown

    End Sub

    Private Declare Function ShellExecute Lib "shell32.dll" Alias _
        "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String,
        ByVal lpFile As String, ByVal lpParameters As String,
        ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

    Private WithEvents Items As Outlook.Items

    Public Sub DruckeAnhaenge(oMail As Outlook.MailItem)
        On Error Resume Next
        Dim colAtts As Outlook.Attachments
        Dim oAtt As Outlook.Attachment
        Dim sFile As String
        Dim sDirectory As String
        Dim sFileType As String

        sDirectory = "C:\Attachments\"

        'Set colAtts = oMail.Attachments

        If oMail.Attachments.Count Then
            For Each oAtt In oMail.Attachments

                ' This code looks at the last 4 characters in a filename
                sFileType = LCase$(Right$(oAtt.FileName, 4))

                Select Case sFileType

                ' Add additional file types below
                    Case ".xls", ".doc", ".pdf"
                        sFile = sDirectory & oAtt.FileName
                        oAtt.SaveAsFile(sFile)
                        ShellExecute(0, "print", sFile, vbNullString, vbNullString, 0)
                End Select
            Next
        End If
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

Outlook没有提供任何方法将COM加载项分配给规则。因此,您需要处理OOM提供的相应事件。在这种情况下,您需要处理在收件箱中收到新项目时触发的Application类的NewMailEx事件。当新邮件到达收件箱时以及客户端规则处理发生之前,NewMailEx事件将触发。您可以使用EntryIDCollection数组中返回的条目ID来调用GetItemFromID方法并处理该项目。然后你可以调用DruckeAnhaenge方法并将项目传递给那里。