一个Item_Send子问题中的多个开放电子邮件项目

时间:2014-01-11 01:53:24

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

目前我的代码检查电子邮件(在Item_Send事件上)以查看它是否有附件,然后提供条件表格加密和发送,发送未加密或取消发送。它还在正文中搜索SSN,为用户提供相同的表单弹出窗口。除非用户同时打开两个电子邮件窗口/实例,否则所有工作都是广告宣传的。例如,如果电子邮件#1有附件而电子邮件#2位于后台,如果我尝试发送电子邮件#1并选择取消发送则返回电子邮件#1而不发送(如广告所示),但是,当你回到电子邮件#2并尝试发送(与电子邮件#1无关)时,它也不会发送。我将在下面显示代码,但是我使用“Cancel = True”命令来停止电子邮件,但这会停止发送操作并且检查员保持打开状态,因此不会让我发送任何可能已打开的电子邮件时间。这有什么想法吗?我怎么能让这个Item_Send事件只处理CURRENT Outlook.MailItem实例而不是另一个可能同时打开的实例。谢谢!我离开了很多代码,这只是我遇到的问题的一部分。 SSNBtnPress = 3表示取消=真

Public Sub Application_ItemSend(ByVal Item As Object, _
    ByRef Cancel As Boolean) Handles Application.ItemSend
    Dim mailItem As Outlook.MailItem = TryCast(Item, Outlook.MailItem)
    If mailItem IsNot Nothing Then
  frm1.ShowDialog()
        If (SSNbtnPress = 1) Then
            mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/x-PII", "Encryptclicked")
            If RegexObj1.IsMatch(mailItem.Body) Then
                mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 3)
                Cancel = False
            ElseIf RegexObj1.IsMatch(mailItem.Subject) Then
                mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 3)
                Cancel = False
            Else
                mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 3)
                Dim addToBody As String = "Test" + vbNewLine + vbNewLine + mailItem.Body
                Dim addtoSubject As String = "Test " + mailItem.Subject
                mailItem.Subject = addtoSubject
                mailItem.Body = addToBody
                Cancel = False
            End If
        End If
    End If
    If (SSNbtnPress = 2) Then
        mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/x-PII", "SUclicked")
        mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 2)
        Cancel = False
        Exit Sub
    ElseIf (SSNbtnPress = 3) Then
        mailItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 2)
        Cancel = True
        Exit Sub
    End If
End Sub

结束班

2 个答案:

答案 0 :(得分:0)

如果你想要的是检查发送的项目是否与发送时打开的项目相对应,你需要查看 ActiveInspector

您可以通过引用变量访问活动检查器到Outlook应用程序,并且可以通过项目本身访问Application变量。

引用ActiveInspector后,您可以获取其CurrentItem并将其与正在发送的项目进行比较,例如

Dim isItemBeingSentCurrent As Boolean = mailItem.Application.ActiveInspector.CurrentItem Is mailItem

答案 1 :(得分:0)

我认为某些属性是从mail1存储的,而在发送其他项目时不会重置。因此,不会发送所有其他邮件