VBA Tipp: E-Mail-Adresse auf Gültigkeit prüfen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte prüfen, ob ein Eingabefeld eine gültige E-Mail-Adresse enthält.

Lösung

"Gültig" kann vieles heißen:

  • Die Adresse ist syntaktisch gültig
  • Die Adresse kann per Internet-Name-Service aufgelöst werden (d.h., es existiert ein sog. MX-Record zu dieser Adresse)
  • Der Adressat antwortet ...

Eine syntaktische Überprüfung geht mit folgender VBA-Funktion:

Public Function IsValidEMail(Text) As Boolean
 
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   Dim ch        As String * 1
   Dim i         As Long
   Dim ats       As Long
   Dim periods   As Long
   Dim leftOfAt  As Boolean
   Dim isLeading As Boolean
 
   If IsNull(Text) Then Exit Function
 
   leftOfAt = True
   isLeading = True
 
   For i = 1 To Len(Text)
      Select Case Asc(Mid$(Text, i, 1))
         Case Asc("@")
            ats = ats + 1
            ' links vom "@" muss wenigstens ein Zeichen sein:
            If i = 1 Then Exit Function
            ' nur ein "@" erlaubt:
            If ats > 1 Then Exit Function
            leftOfAt = False
            isLeading = True
         Case Asc(".")
            ' Punkte rechts vom "@" zählen:
            If Not leftOfAt Then periods = periods + 1
            ' zu viele Punkte (technisch zwar möglich, aber unwahrscheinlich):
            If periods > 4 Then Exit Function
            ' Top Level Domain hat weniger als 2 Zeichen:
            If i > Len(Text) - 2 Then Exit Function
         Case Asc("A") To Asc("Z"), Asc("a") To Asc("z"), Asc("0") To Asc("9")
            isLeading = False
         Case Asc("-")
            ' kein führendes "-" erlaubt:
            If isLeading Then Exit Function
         Case Asc("_")
            ' "_" nur links vom "@" erlaubt:
            If isLeading Or Not leftOfAt Then Exit Function
         Case Else
            ' andere Zeichen sind nicht zulässig:
            Exit Function
      End Select
   Next
 
   If periods > 0 Then IsValidEMail = True
End Function

Dabei wird folgende Heuristik angewandt:

  • Es dürfen Ziffern, Buchstaben, "." und "-" in beliebiger Folge vorkommen
  • Links vom "@" darf zusätzlich das Zeichen "_" vorkommen
  • "-" und "_" dürfen nicht als erstes Zeichen und auch nicht direkt hinter dem "@" auftreten
  • Rechts vom "@" muss mindestens ein Punkt, dürfen höchstens vier Punkte vorkommen.
  • Links vom "@" muss mindestens ein Zeichen stehen.
  • Es darf maximal ein "@" vorhanden sein.
  • Die TLD (Zeichenfolge rechts vom letzten Punkt) muss mindestens zwei Zeichen lang sein.