PR_SMTP_ADDRESS 属性错误:未知或无法找到

问题描述 投票:0回答:2

我在 Outlook 2010 中有 Application_ItemSend 代码。

它会检查收件人地址,如果它不是我们的域之一,则会提示一条消息,询问您是否要向外部发送电子邮件。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim recips As Outlook.Recipients
Dim recip As Outlook.Recipient
Dim pa As Outlook.PropertyAccessor
Dim prompt As String
Dim strMsg As String

Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

Set recips = Item.Recipients
For Each recip In recips
    Set pa = recip.PropertyAccessor
            If InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain1.com.au") = 0 And InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain2.com.au") = 0 And InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain3.com.au") = 0 And InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain4.com.au") = 0 Then
    strMsg = strMsg & "   " & pa.GetProperty(PR_SMTP_ADDRESS) & vbNewLine
    End If
Next
For Each recip In recips
    Set pa = recip.PropertyAccessor
    If InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain1.com.au") = 0 And InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain2.com.au") = 0 And InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain3.com.au") = 0 And InStr(LCase(pa.GetProperty(PR_SMTP_ADDRESS)), "@ourdomain4.com.au") = 0 Then
    prompt = "This email will be sent outside of ourdomains.com.au to:" & vbNewLine & strMsg & "Do you want to proceed?"
    If MsgBox(prompt, vbYesNo + vbExclamation + vbMsgBoxSetForeground, "Check Address") = vbNo Then
            Cancel = True
            Exit Sub
        Else
            Exit Sub
        End If
    End If
Next
End Sub

发送到某些通讯组列表时,这已开始引发错误。

“属性”http://schemas.microsoft.com/mapi/proptag/0x39FE001E”
未知或无法找到。

在错误弹出窗口中点击“结束”,电子邮件仍会发送。

从我的谷歌搜索来看,这是因为并不总是存在 MIME 属性,因此它不能总是解析为 SMTP 地址。

我怎样才能改变它,这样它就不会抛出错误?

vba email outlook
2个回答
0
投票

该属性可能有效也可能无效,具体取决于收件人是否是 Exchange 组织内的 Exchange 用户,以及 Exchange 是否启用缓存模式。

PR_SMTP_ADDRESS 在缓存模式下不可用。您可以在缓存模式下使用 PR_EMS_AB_PROXY_ADDRESSES,它是 PT_MV_STRING8 或 PT_MV_UNICODE (字符串数组)属性。

最后,您可能会发现如何:将基于 Exchange 的电子邮件地址转换为 SMTP 电子邮件地址 文章很有帮助。


0
投票

PR_SMTP_ADDRESS 不保证存在。此外,如果您发送给 SMTP 收件人,该属性将不会出现,但 PR_EMAIL_ADDRESSS 属性(由 Recipient.Address 属性公开)将包含常规 SMTP 地址。

检查 PR_ADDRTYPE 是否为“SMTP”,并读取 PR_EMAIL_ADDRESSS。否则尝试(并适当处理错误)读取 PR_SMTP_ADDRESS 属性。

© www.soinside.com 2019 - 2024. All rights reserved.