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

Aus DBWiki
Wechseln zu: Navigation, Suche

Problem

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

Lösung

"Gültig" kann ja 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(S)
Dim Ch As String * 1, I As Long, Ats As Long, Periods As Long
Dim LeftofAt As Boolean, IsLeading As Boolean
IsValidEMail = True
 
If IsNull(S) Then Exit Function
IsValidEMail = False
LeftofAt = True
IsLeading = True
Periods = 0
Ats = 0
For I = 1 To Len(S)
    Select Case Asc(Mid(S, 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(S) - 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.