我正在尝试检测电子邮件是否是交换。
这是我拥有的代码:
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