email - Outlook 电子邮件中的收件人列表(收件人和抄送)
问题描述
我有一个脚本,在 CSV 文件中列出了符合 Outlook 规则的电子邮件。
现在它列出:当前时间、保存电子邮件的 Outlook 文件夹、电子邮件类别、接收时间、发件人代码、发件人电子邮件、主题、收件人和抄送名称、附件、正文(纯文本)
我的问题是 To & CC。我想获得电子邮件而不是名称,就像我对发件人所做的那样,但没有设法做到这一点。任何人都可以帮忙吗?
我在下面附上了我的代码和我得到的结果(以及我想要的结果)的示例。
Option Explicit
Const TextFileNPath As String = "D:\Email Register\Emails.txt"
Sub ListEmailsDataCSV(Item As Outlook.MailItem)
Dim sReceived As String
Dim sSubj As String
Dim sSenderCode As String
Dim sFrom As String
Dim sTo As String
Dim sCC As String
Dim sAttach As String
Dim sBody As String
Dim sCategory As String
Dim FF As Long
Dim objAtt As Outlook.Attachment
Dim fileEXT As String
Dim bImages As Boolean
Dim iCounter As Integer
ItemReceived:
sReceived = Format$(Item.ReceivedTime, "yymmdd-hhnnss")
ItemSubject:
sSubj = Item.Subject
sSubj = CleanString(sSubj)
ItemFrom:
sFrom = UCase(Item.SenderEmailAddress)
If InStr(1, sFrom, "ADMINISTRATIVE GROUP") > 0 Then
sSenderCode = "DRAG"
sFrom = "Corp. " & Right(sFrom, Len(sFrom) - InStrRev(sFrom, "="))
GoTo ItemTo
Else
sSenderCode = UCase(Mid(sFrom, InStr(1, sFrom, "@") + 1, 4))
End If
ItemTo:
sTo = CleanString(UCase(Item.To))
ItemCC:
sCC = CleanString(UCase(Item.CC))
ItemAttach:
iCounter = 0
fileEXT = ""
sAttach = "None"
If Item.Attachments.Count = 0 Then GoTo ItemBody
For Each objAtt In Item.Attachments
fileEXT = UCase(Right(objAtt.FileName, 3))
If InStr(1, UCase(objAtt.FileName), "IMAGE") > 0 Then
If fileEXT = "JPG" Or fileEXT = "PNG" Or fileEXT = "GIF" Or fileEXT = "BMP" Then
bImages = True
GoTo NextAttach
End If
End If
iCounter = iCounter + 1
If iCounter = 1 Then
sAttach = objAtt.FileName 'DisplayName
Else
sAttach = sAttach & "; " & objAtt.FileName 'DisplayName
End If
NextAttach:
Next objAtt
If iCounter = 0 Then
sAttach = "Images/logos"
Else
If bImages Then sAttach = sAttach & "; +Img/Logo"
End If
sAttach = CleanString(sAttach)
ItemBody:
sBody = Item.Body
sBody = CleanString(sBody)
CleanEntersBody:
sBody = CleanDUPL(sBody)
If InStr(1, sBody, " ") > 0 Then GoTo CleanEntersBody
If InStr(1, sBody, " |") > 0 Then GoTo CleanEntersBody
If InStr(1, sBody, "||") > 0 Then GoTo CleanEntersBody
MailCategory:
sCategory = Item.Categories
OutputFile:
FF = FreeFile()
Open TextFileNPath For Append As #FF
'Write #FF, "Export Started", "Received", "Sender Code", "Subject", "Sender", "To", "CC", "Attachments", "Body"
Write #FF, Now, "Fldr: " & Item.Parent, sCategory, sReceived, sSenderCode, "From: " & sFrom, sSubj, "To: " & sTo & " - CC: " & sCC, "Att: " & sAttach, sBody
Close #FF
End Sub
Function CleanString(sString As String) As String
sString = Replace(sString, Chr(10), "|") ' Char 10 = ENTER "new Line"
sString = Replace(sString, Chr(13), "|") ' Char 13 = ENTER "Return" (a normal ENTER is Chr10 + Chr13)
sString = Replace(sString, Chr(9), " ") ' Char 9 = TAB
sString = Replace(sString, Chr(34), "'") ' Char 34 = "
sString = Replace(sString, ",0", ".0")
sString = Replace(sString, ",1", ".1")
sString = Replace(sString, ",2", ".2")
sString = Replace(sString, ",3", ".3")
sString = Replace(sString, ",4", ".4")
sString = Replace(sString, ",5", ".5")
sString = Replace(sString, ",6", ".6")
sString = Replace(sString, ",7", ".7")
sString = Replace(sString, ",8", ".8")
sString = Replace(sString, ",9", ".9")
sString = Replace(sString, ",", ";")
CleanString = sString
End Function
Function CleanDUPL(sString As String) As String 'used recursive to clean duplicates
sString = Replace(sString, " |", "|")
sString = Replace(sString, "||", "|")
sString = Replace(sString, " ", " ")
CleanDUPL = sString
End Function
我得到的结果样本是:
#2020-09-18 13:39:27#;"Fldr: Inbox Eng";"Regist";200918-121900;"TEST";"From: VMERS@TESTCOMPANY.COM";"RE: Documentation Area 1"; “收件人:史密斯;约翰 - 抄送:桑德斯;IRENA”;“联系人:无”;“嗨,约翰;|Bla bla bla ...”#2020-09-18 13:39:27#;“Fldr:收件箱 Eng ";"Regist";200918-123900;"ENTE";"发件人:IRENA@ENTERPRISE.COM";"RE:文档区 1";"收件人:SMITH;JOHN;'VICTOR MERS' - CC:";"Att : 图片/徽标";"Bla bla bla..." #2020-09-18 13:39:32#;"Fldr: Sent";;200918-130800;"DRAG";"From: Corp. JSMITH1"; “RE:Area 1 Draft Schedule”;“收件人:'VICTOR MERS';SANDERS;IRENA;AINA NELSON - CC:”;“收件人:Schedule_A v01.PDF;IMG_5989.jpg +Img/Logo”;“呜呜呜……”
所以我得到:
“致:史密斯;约翰 - 抄送:桑德斯;IRENA”
“致:史密斯;约翰;‘维克多·梅尔斯’——抄送:”
“致:‘VICTOR MERS’;Sanders;IRENA;AINA NELSON - CC:”
我想得到:
“致:JSMITH1@MYCOMPANY.COM - 抄送:IRENA@ENTERPRISE.COM”
“致:JSMITH1@MYCOMPANY.COM;VMERS@TESTCOMPANY.COM - 抄送:”
“致:VMERS@TESTCOMPANY.COM;IRENA@ENTERPRISE.COM;A.NELSON@TESTCOMPANY.COM -抄送:”
在此先感谢您的帮助 SAI
解决方案
而不是使用To
//属性,而是使用CC
集合,遍历所有收件人,并为每个收件人读取和属性。要区分收件人类型,请检查属性 ( / / )。BCC
Recipients
Recipient.Name
Recipient.Address
Recipient.Type
olTo
olCC
olBCC
请记住,对于 EX 收件人,您将获得 EX 类型的地址,而不是 SMTP。在这种情况下,您需要访问Recipient.AddressEntry.Type
属性,如果它是“EX”,请使用Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress
属性。
推荐阅读
- java - new Thread(Runnable object).start() 与 new Thread(Runnable ref. {run()});.start() 之间的区别
- html - 如何在 HTML 表中显示带有分隔列的 SQL 查询结果
- angular - 如何在 node_modules 中找到我的导入
- c# - 如何处理只需要数据库中符号的“最后一个”值的高速数据流C#
- css - 如何在 Ionic Angular 代码中实现我在 Figma 中制作的 UI 原型?
- angular - 从公共 CDN 加载 Angular 运行时,而不是与构建捆绑
- python - 使用自动模块获取导航栏中的每个对象以从 python 文件中列出
- android - 如何组合 2 个流以将它们的值作为参数传递给暂停乐趣(返回字符串)?
- c++ - 如何循环这个过程直到两个初始时间都达到0?
- ios - 如何从 API 请求中接受 String 或 Int 作为响应类型?