Outlook VBS oMail.to 对象将只打印“收件人”行中的名字或地址

Outlook VBS oMail.to object that will print only the first name or address in the To line

我拼凑了一个 vbs 宏,以 .txt 格式保存大量电子邮件,文件名遵循以下格式:[yymmdd].[hhmm].[sender].[recipient].[subject line].txt

结果几乎是完美的,但我遇到的问题是我发现打印 "recipient" 名称的最佳术语是 oMail.to,它将打印每个 name/address 在电子邮件的“收件人”行中。我正在尝试找出一种方法来限制只打印“收件人”行中出现的名字或地址的内容,这样如果将电子邮件发送到 3 个地址,保存的电子邮件仅在主题行中显示一个地址.

理想情况下,我希望发件人和收件人条款只打印已知联系人的姓氏或未知联系人的电子邮件地址,但我不希望有一个简单的解决方案来解决这个问题。

提前感谢您的任何想法!

Option Explicit
Public Sub SaveMessageAsTxt()
 Dim oMail As Outlook.MailItem
 Dim objItem As Object
 Dim sPath As String
 Dim dtDate As Date
 Dim sName As String
 Dim enviro As String
 enviro = CStr(Environ("USERPROFILE"))
 For Each objItem In ActiveExplorer.Selection
 If objItem.MessageClass = "IPM.Note" Then
 Set oMail = objItem
sName = oMail.SenderName & "." & oMail.To & "." & oMail.Subject
 ReplaceCharsForFileName sName, "-"
dtDate = oMail.ReceivedTime
 sName = Format(dtDate, "yymmdd.", vbUseSystemDayOfWeek, _
 vbUseSystem) & Format(dtDate, "hhnn", _
 vbUseSystemDayOfWeek, vbUseSystem) & "." & sName & ".txt"
sPath = enviro & "\Documents\Saved Emails\"
 Debug.Print sPath & sName
 oMail.SaveAs sPath & sName, olTXT
End If
 Next
End Sub

Private Sub ReplaceCharsForFileName(sName As String, _
 sChr As String _
)
 sName = Replace(sName, "'", sChr)
 sName = Replace(sName, "*", sChr)
 sName = Replace(sName, "/", sChr)
 sName = Replace(sName, "\", sChr)
 sName = Replace(sName, ":", sChr)
 sName = Replace(sName, "?", sChr)
 sName = Replace(sName, Chr(34), sChr)
 sName = Replace(sName, "<", sChr)
 sName = Replace(sName, ">", sChr)
 sName = Replace(sName, "|", sChr)
End Sub

使用 MailItem class 的 Recipients 属性,其中 return 是一个 Recipients 集合,表示 Outlook 的所有收件人物品。使用 Recipients (index),其中 index 是名称或索引号,return 单个 Recipient 对象。名称可以是表示收件人的显示名称、别名或完整 SMTP 电子邮件地址的字符串。

访问 AddressEntry 属性 强制解析未解析的收件人姓名。如果无法解析名称,则会出现 return 错误。如果收件人已解析,则 Resolved 属性 为真。然后你可以使用 AddressName 属性。