【问题标题】:Outlook Add-in Sender/TO/CC/BCC issue VB.netOutlook Add-in Sender/TO/CC/BCC 问题 VB.net
【发布时间】:2014-09-07 01:54:07
【问题描述】:

我在尝试获取电子邮件中的其他电子邮件地址列表时遇到了一些问题。目前它得到 SenderName 就好了,但是一旦它移动到 To 它似乎仍然有 SenderName 一遍又一遍.

     If _mailItem.SenderName IsNot Nothing Then
        Dim tmpResult() As String = _mailItem.SenderName.ToString.Split(";")

        For Each name In tmpResult
            result = name.Split(",")

            If result.Length > 1 Then
                employeeAlreadyThere = EIG.FindContactEmailByName(GetSenderSMTPAddress(_mailItem).Trim)

                If employeeAlreadyThere = False Then
                    Call EIG.Search(name.ToString)
                End If
            End If
        Next
    End If

现在,正如我为 SenderName 所说的那样,它工作得很好。但是,下面的代码是上面代码之后的代码:

    If _mailItem.To IsNot Nothing Then
        Dim tmpResult() As String = _mailItem.To.ToString.Split(";")

        For Each name In tmpResult
            result = name.Split(",")

            If result.Length > 1 Then
                employeeAlreadyThere = EIG.FindContactEmailByName(GetSenderSMTPAddress(_mailItem).Trim)

                If employeeAlreadyThere = False Then
                    Call EIG.Search(name.ToString)
                End If
            Else
                EIG.lastFirstName = name.Trim().ToString
                EIG.emailAddress = EIG.lastFirstName.Replace("-", "_").Replace("/", "").Replace("\", "").Replace(" ", "_").Trim() & "@zzzz.com" 'DL-I/S etwBusiness => DL@zzzz.com
                Call EIG.saveImage()
            End If
        Next
    End If

GetSenderSMTPAddress(_mailItem) 代码是这样的:

Private Function GetSenderSMTPAddress(ByVal mail As Outlook.MailItem) As String
    Dim PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

    If mail Is Nothing Then
        Throw New ArgumentNullException()
    End If

    If mail.SenderEmailType = "EX" Then
        Dim mail_sender As Outlook.AddressEntry = mail.Sender

        If mail_sender IsNot Nothing Then
            If mail_sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeUserAddressEntry OrElse mail_sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry Then
                Dim exchUser As Outlook.ExchangeUser = mail_sender.GetExchangeUser()

                If exchUser IsNot Nothing Then
                    Return exchUser.PrimarySmtpAddress
                Else
                    Return Nothing
                End If
            Else
                Return TryCast(mail_sender.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS), String)
            End If
        Else
            Return Nothing
        End If
    Else
        Return mail.SenderEmailAddress
    End If
End Function

我正在传递一个 Outlook.MailItem,我知道它总是会产生 SenderName 但这是我不确定如何获取 收件人、抄送和密送

我试过了:

GetSenderSMTPAddress(_mailItem.To)

这会引发以下警告:

警告 1 将“字符串”转换为 'Microsoft.Office.Interop.Outlook.MailItem'。

所以任何解决此问题的提示都会很棒!

【问题讨论】:

    标签: vb.net outlook smtp outlook-addin outlook-2010


    【解决方案1】:

    所有收件人都作为收件人对象存储在 MailItem.Recipients 中。您需要访问 Recipient.AddressEntry 以获取 Exchange 收件人的 SMTP 地址。 To、Cc 和 Bcc 字段仅有助于获取显示名称。

    另外:不需要对 SenderName 进行拆分;它始终是一个电子邮件地址或显示名称。

    【讨论】:

    • 如果我这样做 Dim mail_sender As Outlook.AddressEntry = mail.To 而不是 Dim mail_sender As Outlook.AddressEntry = mail.Sender 它给出了一个将“String”转换为“Microsoft.Office.Interop.Outlook.AddressEntry”时可能会出现运行时错误警告。
    • 这是因为 To 属性返回的是字符串,而不是 AddressEntry 对象。只有 Recipient.AddressEntry 和 MailItem.Sender 返回 AddressEntry 对象。
    • 那我将如何获得 To/CC 和 BCC?
    • 遍历 Recipients 集合并检查 Recipient.Name/Address/Type 属性。类型将为 olTo/olCC/olBCC。
    猜你喜欢
    • 2021-03-03
    • 2022-06-17
    • 1970-01-01
    • 2010-12-05
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多