查看Outlook SendereMailType是否为交换并设置变量



我正在尝试检测电子邮件是否是交换。

这是我拥有的代码:

Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles Application.ItemSend
    Dim sendAddress As String
    If Item.SenderEmailType = "EX" Then
        sendAddress = Item.Sender.GetExchangeUser().PrimarySmtpAddress
    Else
        sendAddress = Item.SenderEmailAddress
    End If
    System.Windows.Forms.MessageBox.Show(sendAddress)
End Sub

运行此功能时,我会收到以下错误:

system.nullReferenceException:"对象变量或块变量未设置。"

有什么想法是?

受这个答案的启发,我认为您想要的就是这样:

Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles application.ItemSend
    Dim mailItem As Outlook.MailItem = DirectCast(Item, Outlook.MailItem)
    Dim sender As Outlook.AddressEntry = mailItem.Sender
    Dim senderAddress As String = ""
    If sender IsNot Nothing AndAlso
       (sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeAgentAddressEntry OrElse _
        sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry) Then
        Dim exchangeUser As Outlook.ExchangeUser = sender.GetExchangeUser()
        If exchangeUser IsNot Nothing Then
            senderAddress = exchangeUser.PrimarySmtpAddress()
        End If
    Else
        Dim recipient As Outlook.Recipient = application.Session.CreateRecipient(mailItem.SenderEmailAddress)
        If recipient IsNot Nothing Then
            Dim exchangeUser As Outlook.ExchangeUser = recipient.AddressEntry.GetExchangeUser()
            If exchangeUser IsNot Nothing Then
                senderAddress = exchangeUser.PrimarySmtpAddress()
            End If
        End If
        'check if senderAddress has been set with above code. If not try SenderEmailAddress
        If senderAddress = "" Then
            senderAddress = mailItem.SenderEmailAddress()
        End If
    End If
    MessageBox.Show(senderAddress)
End Sub

要注意的第一件事是,我将对象Item铸成MailItem。这样我就可以正确访问属性。我建议您将选项严格解决:

将隐式数据类型转换限制为仅扩大转换,放弃较晚的绑定,并取消导致对象类型的隐式键入。

您可能还想检查其他OlAddressEntryUserType S,但我将其留给您。此代码应该至少解决您的错误。

但是,在查看上述代码后,我想知道至少在Application.ItemSend方法中是否有必要。我相信这可能会使这样的东西凝结:

Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles Application.ItemSend
    Dim mailItem As Outlook.MailItem = DirectCast(Item, Outlook.MailItem)
    Dim senderAddress As String = mailItem.SenderEmailAddress
    Dim recipient As Outlook.Recipient = Application.Session.CreateRecipient(senderAddress)
    If recipient IsNot Nothing Then
        Dim exchangeUser As Outlook.ExchangeUser = recipient.AddressEntry.GetExchangeUser()
        If exchangeUser IsNot Nothing Then
            senderAddress = exchangeUser.PrimarySmtpAddress()
        End If
    End If
    MessageBox.Show(senderAddress)
End Sub

最新更新