首页 > 解决方案 > Outlook VBS oMail.to 对象将仅打印收件人行中的名字或地址

问题描述

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

结果几乎是完美的,但我遇到的问题是,我发现打印“收件人”名称的最佳术语是 oMail.to,它将打印电子邮件收件人行中的每个名称/地址。我正在尝试找出一种方法来将打印的内容限制为仅显示在“收件人”行中的名字或地址,以便如果将电子邮件发送到 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

标签: emailvbscriptoutlook

解决方案


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

访问该AddressEntry属性会强制解析未解析的收件人姓名。如果无法解析名称,则返回错误。如果接收者被解析,则该Resolved属性为真。然后您可以使用地址Name属性。


推荐阅读