代码之家  ›  专栏  ›  技术社区  ›  bd528

验证VBA中的电子邮件收件人字段值

  •  4
  • bd528  · 技术社区  · 7 年前

    我希望验证用VBA发送到Outlook电子邮件的值

    http://www.geeksengine.com/article/validate-email-vba.html

    使用上面站点的代码,电子邮件地址 1@1.com 返回True或valid。然而, 1@1.com; 2@1.com

    是否可以验证一个值,例如 1@1.com;2@1.com

    3 回复  |  直到 7 年前
        1
  •  8
  •   Erik A    7 年前

    验证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)
    

    验证前景的唯一合理方法

    您可以使用以下代码让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
    
        2
  •  2
  •   Andre    7 年前

    使用 Split() 函数将字符串拆分为各个地址,并用函数循环检查这些地址。

    好消息是:你不需要单独的箱子。一个地址没有 ; 拆分() ,循环只运行一次。

        3
  •  2
  •   Santosh    7 年前

    Public Function ValidateEmailAddress(ByVal strEmailAddress As String) As Boolean
        On Error GoTo Catch
    
        Dim objRegExp As New RegExp
        Dim blnIsValidEmail As Boolean
    
        objRegExp.IgnoreCase = True
        objRegExp.Global = True
        objRegExp.Pattern = "^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$"
    
        blnIsValidEmail = objRegExp.test(strEmailAddress)
        ValidateEmailAddress = blnIsValidEmail
    
        Exit Function
    
    Catch:
        ValidateEmailAddress = False
        MsgBox "Module: " & MODULE_NAME & " - ValidateEmailAddress function" & vbCrLf & vbCrLf _
            & "Error#:  " & Err.Number & vbCrLf & vbCrLf & Err.Description
    End Function
    
    推荐文章