Public Function IsEMailAddress(ByVal sEmail As String, _
Optional ByRef sReason As String) As Boolean
' Als de functie een false retourneert wordt de reden daarvoor meegegeven in de optionele reason string
'IsValid = IsEMailAddress("johan@johan.be", InvalidReason)
'MsgBox "Invalid mail address, de reden is: " & InvalidReason
Dim IsValid As Boolean
Dim InvalidReason, OK As String
Dim sPreffix As String
Dim sSuffix As String
Dim sMiddle As String
Dim nCharacter As Integer
Dim sBuffer As String
sEmail = Trim(sEmail)
If Len(sEmail) < 8 Then
sReason = "Te kort mailadres"
Exit Function
End If
If LCase(Right(sEmail, 1)) Like "[a-z]" Then
GoTo CheckAt
End If
sReason = "Niet toegelaten karakter op einde" ' Check voor '.' etc op het einde
Exit Function
CheckAt:
If InStr(sEmail, "@") = 0 Then
sReason = "Missend @ in het mailadres"
Exit Function
End If
If InStr(InStr(sEmail, "@") + 1, sEmail, "@") < 0 Then
sReason = "Te veel @ in het mailadres"
Exit Function
End If
If InStr(sEmail, ".") = 0 Then
sReason = "Missend . in het mailadres"
Exit Function
End If
If InStr(sEmail, "@.") >= 1 Then
sReason = "Missend achtervoegsel in het mailadres"
Exit Function
End If
If InStr(sEmail, ".@") >= 1 Then
sReason = "Zeker dat er een .@ staat in het mailadres?"
Exit Function
End If
If InStr(sEmail, "..") = 1 Then
sReason = "Twee .. na elkaar is niet gebruikelijk in een mailadres!"
Exit Function
End If
If InStr(sEmail, "@") = 1 Or InStr(sEmail, "@") = Len(sEmail) Or _
InStr(sEmail, ".") = 1 Or InStr(sEmail, ".") = Len(sEmail) Then
sReason = "Niet toegelaten formaat van het mailadres"
Exit Function
End If
For nCharacter = 1 To Len(sEmail)
sBuffer = Mid$(sEmail, nCharacter, 1)
If Not (LCase(sBuffer) Like "[a-z]" Or sBuffer = "@" Or _
sBuffer = "." Or sBuffer = "-" Or sBuffer = "_" Or IsNumeric(sBuffer)) Then
sReason = "Niet toegelaten karakter in het mailadres"
Exit Function
End If
Next nCharacter
nCharacter = 0
On Error Resume Next
sBuffer = Right(sEmail, 4)
If InStr(sBuffer, ".") = 0 Then GoTo TooLong:
If Left(sBuffer, 1) = "." Then sBuffer = Right(sBuffer, 3)
If Left(Right(sBuffer, 3), 1) = "." Then sBuffer = Right(sBuffer, 2)
If Left(Right(sBuffer, 2), 1) = "." Then sBuffer = Right(sBuffer, 1)
If Len(sBuffer) < 2 Then
sReason = "Topleveldomein is te kort (landextensie aan de mail bv . be), minimum 2 kakrakters "
Exit Function
End If
TooLong:
If Len(sBuffer) > 3 Then
sReason = "Topleveldomein is te lang (landextensie aan de mail bv . be), maximum 3 kakrakters"
Exit Function
End If
sReason = Empty ' We raakten tot hier dus zal 't adress wel OK zijn.
IsEMailAddress = True
End Function