问题描述
在将电子邮件发送到excel中的可用Outlook电子邮件帐户列表之前,删除在全局地址列表中找不到的非活动(不存在)电子邮件帐户
解决方案
运行sql Query以从数据库中获取用户名或用户电子邮件ID
第1步:
查询1:
strSQL = "select distinct [User Email ID] from dbo.vw_EmailRecipients_AT where Report_Catalog_ID in (" & rptid & ")"
或
查询2:
strSQL = "select distinct [User Name] from dbo.vw_EmailRecipients_AT where Report_Catalog_ID in (" & rptid & ")"
第2步:
调用模块将检索结果集复制到Excel工作表
Sub Testemail()
Dim rEmails As Range
Dim rEmail As Range
Dim oOL As Object
Set oOL = CreateObject("Outlook.Application")
Set rEmails = ThisWorkbook.Sheets("Report_Users").Range("A2:A" & Range("A65000").End(xlUp).Row)
For Each rEmail In rEmails
rEmail.Offset(, 1) = ResolveDisplayNameToSMTP(rEmail.Value, oOL)
Next rEmail
End Sub
第3步:
解析显示名称
Public Function ResolveDisplayNameToSMTP(sFromName, OLApp As Object) As String
Dim oRecip As Object 'Outlook.Recipient
Dim oEU As Object 'Outlook.ExchangeUser
Dim oEDL As Object 'Outlook.ExchangeDistributionList
Set oRecip = OLApp.Session.CreateRecipient(sFromName)
oRecip.Resolve
If oRecip.Resolved Then
ResolveDisplayNameToSMTP = "Valid"
Else
ResolveDisplayNameToSMTP = "Not Valid"
End If
End Function
错误1:如果我使用查询1:结果集将是abcdef@company.com,其中所有电子邮件ID都有效 - WRONG_RESULT。
错误2:如果我使用查询2:结果集将是UserName的组合 像Rajan jha(rjhan)和合同员工将是Rajan jha(rjhan - Compnay1在Compnay2)
在这个结果输出与Rajanjha(rjahan),如果在GAL中找到电子邮件帐户它将有效,如果没有找到它将是无效的电子邮件。对于像Rajan jha(rjhan - Compnay1在Compnay2)的结果集,其中甚至GAL中存在电子邮件帐户,结果无效。
请指导我解决这个问题
答案 0 :(得分:3)
我通过在中间输出的条件检查中进行小的更改来解决问题。
Public Function ResolveDisplayNameToSMTP(sFromName, OLApp As Object) As String
Dim oRecip As Object 'Outlook.Recipient
Set oRecip = OLApp.Session.CreateRecipient(sFromName)
oRecip.Resolve
oRecipName = oRecip.Name
If oRecip.Resolved And InStr(oRecipName, "@") = 0 Then
ResolveDisplayNameToSMTP = "Valid"
Else
ResolveDisplayNameToSMTP = "Not Valid"
End If
End Function
此处oRecip.Resolve
正在解析有效和无效电子邮件ID的电子邮件ID
同一公司和InStr(oRecipName, "@") = 0
扮演关键角色,以删除无效的电子邮件ID。
非活动电子邮件oRecip.Resolve
会将输出解析为有效。但输出将是
rajaanjha@company1.com
此处InStr(oRecipName, "@") = 0
检查字符串中的@
并将其标记为无效的电子邮件ID
有效电子邮件oRecip.Resolve
会将输出解析为有效。但输出将是
用户电子邮件ID的Rajan Kumar Jha(第一个中间姓)
@
不在中间字符串中且有效电子邮件ID。
但我有像
这样的电子邮件ID问题rajanjha@company2.com
Active Active ID的公司未解决的用户名需要解决。
答案 1 :(得分:0)
我同意尼龙。而不是使用VBA,我是VBA的忠实粉丝,我想说使用下面的URL中描述的方法获取GAL。
https://www.extendoffice.com/documents/outlook/3590-outlook-export-gal-to-csv.html
我已经尝试过VBA下载与Outlook中所有联系人有关的所有数据,但后果可怕。如果您使用内置控件,并按照上述步骤操作,您将快速准确地获得所需的一切。如果您尝试开发自己的自定义VBA解决方案,那么您完全可以自己...