Vb.net 检查Outlook SenderEmailType是否为exchange和set变量
我正在尝试检测电子邮件是否为exchange 以下是我的代码:Vb.net 检查Outlook SenderEmailType是否为exchange和set变量,vb.net,outlook,Vb.net,Outlook,我正在尝试检测电子邮件是否为exchange 以下是我的代码: 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.Get
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
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
首先要注意的是,我正在将对象Item
转换为MailItem
。这样我才能正确访问属性。我建议你转向:
将隐式数据类型转换限制为仅扩大转换、不允许后期绑定以及不允许导致对象类型的隐式类型
您可能还想检查其他OlAddressEntryUserType
s,但我将把它留给您。此代码至少可以解决您的错误
但是,在查看了上述代码之后,我想知道是否有必要,至少在应用程序.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 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
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
项目的类型是什么?请添加更多相关代码。对不起,我已编辑。这有帮助吗?对象的可能副本可以是任何东西,猜测它不具有您认为它具有的属性,即发件人或SenderEmailAddress。调试代码并查看哪一行抛出错误以及该项由什么组成。我还建议你熟悉强类型的课程和习惯。绝对完美!谢谢@bugs