我希望验证发送到VBA中的Outlook电子邮件的值
我找到了几个例子,例如: -
http://www.geeksengine.com/article/validate-email-vba.html
使用上述站点中的代码,电子邮件地址1@1.com返回True或有效.但是,1@1.com; 2@1.com返回无效.虽然这不是有效的电子邮件地址,但它是Outlook中"收件人"字段的有效值.
是否可以验证诸如1@1.com; 2@1.com使用VBA之类的值?
验证Outlook To字段是一项艰巨的任务.
请考虑以下几行:
a@a.com<SomeName;b@b.com 'Valid, 2 addresses, first one named SomeName
a@a<a.com 'Invalid, < needs to be escaped
a@a.com.com;;b@b.com; 'Valid, 2 addresses
a@a.com;a 'Invalid, second address is not valid
a<b@a.com 'Weirdly enough, this is valid according to outlook, mails to b@a.com
'(ignores part before the <)
a@a.com<b@a.com 'But this isn't valid
'(closing > needed in this specific case, mail address = a@a.com)
Run Code Online (Sandbox Code Playgroud)
To在我看来,验证Outlook 字段的唯一合理方法是检查Outlook是否认为它是有效的.任何近似都必然会出错.
您可以使用以下代码让Outlook验证to字符串,并检查它是否可以确定每个字段的邮件地址
Public Function IsToValid(ToLine As String) As Boolean
Dim olApp As Object 'Outlook.Application
Dim mail As Object 'Outlook.MailItem
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
Set olApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Set mail = olApp.CreateItem(0)
Dim rp As Object 'Outlook.Recipient
With mail
.To = ToLine
.Recipients.ResolveAll
For Each rp In .Recipients
If rp.Address & "" = "" Then
mail.Delete
Exit Function
End If
Next
End With
mail.Delete
IsToValid = True
End Function
Run Code Online (Sandbox Code Playgroud)