E-Mail auf Plausibilität prüfen

Sentinel997

Benutzer
Beiträge
11
Guten Morgen Zusammen
Ich habe eine Kundendatenbank welche auch die E-Mail Adresse aufgeführt hat.
Leider haben wir erst vor kurzem die Möglichkeit erhalten das Feld vor dem speichern auf Plausibilität zu prüfen.
Nun habe ich Einträge die nicht einer korrekten E-Mail Formatierung entsprechen und so ein Folgeprogramm immer wieder abstürzt.
Anhand einer ersten Abfrage konnte ich schon Einige eliminieren.
1674800878563.png
Nun habe ich aber immer noch welche die bei meiner Prüfung durchgerutscht sind:
Leerzeichen / zweimal @
1674800950812.png
Hätte mir jemand noch eine Idee wie ich die Abfrage erstellen könnte das auch diese ausgeschieden werden.
Danke für die Hilfe.
Gruss
 
Werbung:
Das ist nicht so einfach wie man denkt.


oder

 
Also ich prüfe diverse Dinge die häufig falsch sind in einem Trigger, allerdings reize ich das nicht aus. Ich gehe also z.B. nicht daher und prüfe auf gültige Zeichen sondern auf die häufigen ungültigen Zeichen, wie z.B. ü,ä,ö aber nicht auf Sonderzeichen die eh keiner eintippt. Hier mal die Prüfung auf unzulässige Zeichen:
Code:
AND    (    len(replace(replace(adresse,'mailto:',''),':','')) != len(replace(adresse,'mailto:',''))
                OR        ltrim(rtrim(adresse)) LIKE '% %'
                OR        adresse LIKE '%\%'
                OR        adresse LIKE '%/%'
                OR        adresse LIKE '%(%'
                OR        adresse LIKE '%)%'
                OR        adresse LIKE '%?%'
                OR        adresse LIKE '%#%'
                OR        adresse LIKE '%=%'
                OR        adresse LIKE '%ä%'
                OR        adresse LIKE '%ö%'
                OR        adresse LIKE '%ü%'
                OR        len(replace(adresse,'@','')) < len(adresse) - 1 ) )
Also @ wenn es mehr als einmal vorkommt, Leerzeichen und andere Zeichen wenn sie vorkommen. Doppelpunkt kann schon mal sein in Verbindung mit mailto: (was ich dann entferne) aber nie in einer anderen Form.

Dann prüfe ich noch ob eine TLD vorhanden ist und mindestens 2 Zeichen lang. Also *@*.<mind. 2 Buchstaben>. Einen anderen Fehler den man hätte Abfangen können habe ich noch nie gehabt.
 
sondern auf die häufigen ungültigen Zeichen, wie z.B. ü,ä,ö
Die sind aber zulässig in einer Mailadresse. RFC6531 erlaubt UTF-8 Zeichen in der Mailadresse (und Domain-Namen mit Umlauten sind ja auch erlaubt).
Also @ wenn es mehr als einmal vorkommt, Leerzeichen und andere Zeichen wenn sie vorkommen.
Das @ darf tatsächlich zweimal vorkommen (wird für "relay" verwendet).
Und auch ansonsten sind ziemlich viele "Sonderzeichen" erlaubt. Das regex der erlaubten Zeichen wäre: a-zA-Z0-9!#$%&'*+/=?^_`{|}~-

Die einzige Methode die sicherstellt, dass eine Mailadresse valide ist, ist eine Mail an die Adresse zu schicken. Ansonsten kann man eigentlich nur prüfen, ob die Adresse den Minimalanforderungen entspricht (mindestens ein @ und mindestens 3 Zeichen lang. a@b ist theoretisch valide wenn die Domain b aufgelöst werden könnte.
 
Also ich prüfe diverse Dinge die häufig falsch sind in einem Trigger, allerdings reize ich das nicht aus. Ich gehe also z.B. nicht daher und prüfe auf gültige Zeichen sondern auf die häufigen ungültigen Zeichen, wie z.B. ü,ä,ö aber nicht auf Sonderzeichen die eh keiner eintippt. Hier mal die Prüfung auf unzulässige Zeichen:
Code:
AND    (    len(replace(replace(adresse,'mailto:',''),':','')) != len(replace(adresse,'mailto:',''))
                OR        ltrim(rtrim(adresse)) LIKE '% %'
                OR        adresse LIKE '%\%'
                OR        adresse LIKE '%/%'
                OR        adresse LIKE '%(%'
                OR        adresse LIKE '%)%'
                OR        adresse LIKE '%?%'
                OR        adresse LIKE '%#%'
                OR        adresse LIKE '%=%'
                OR        adresse LIKE '%ä%'
                OR        adresse LIKE '%ö%'
                OR        adresse LIKE '%ü%'
                OR        len(replace(adresse,'@','')) < len(adresse) - 1 ) )
Also @ wenn es mehr als einmal vorkommt, Leerzeichen und andere Zeichen wenn sie vorkommen. Doppelpunkt kann schon mal sein in Verbindung mit mailto: (was ich dann entferne) aber nie in einer anderen Form.

Dann prüfe ich noch ob eine TLD vorhanden ist und mindestens 2 Zeichen lang. Also *@*.<mind. 2 Buchstaben>. Einen anderen Fehler den man hätte Abfangen können habe ich noch nie gehabt.
Vielen Dank an alle für die Ausführungen. Das scheint ja ein Thema zu sein welches nicht abschliessend besprochen werden werden kann.

Den Ansatz von ukulele ist für mein Projekt aber schon sehr gut.

Da ich nicht sehr fit auf SQL bin erlaubt mir deshalb bitte die Frage:

Wie bringe ich den code von ukulele in eine SQL Abfrage rein?
Und ich möchte nur eine Übersicht über die "falschen" E-Mailadressen und nicht das dies korrigiert werden.

Danke
 
Du könntest alle Mailadressen prinzipiell soweit testen, daß Du sicher sein kannst, daß eine Mail an diese Adresse verschickt werden kann. Dazu reicht telnet und Tools, um den Mailserver zu ermitteln (nslookup). Hier ist das z.B. beschrieben: Mailadressen-überprüfen für Fortgeschrittene
Eigentlich möchte ich nur die bestehenden Adressen in der gesamten Datenbank überprüft haben.
Ob die E-Mail ankommen wird oder nicht ist zunächst sekundär.
 
Den ersten Schritt hast du doch schon getan, du hast gezählt, wie viele Adressen kein @ enthalten. Du kannst auch einfach alle Adressen ausgeben, die diese (und weitere) Bedingungen nicht erfüllt, z.B.:
Code:
SELECT    *
FROM    rpairep
WHERE    KDMAIL != ''
AND    (    KDMAIL NOT LIKE '%@%.%'
OR      KDMAIL LIKE '% %'
OR      KDMAIL LIKE '%(%'
OR      KDMAIL LIKE '%)%'
OR      KDMAIL LIKE '%?%'
OR      KDMAIL LIKE '%#%'
OR      KDMAIL LIKE '%=%'
OR      KDMAIL LIKE '%ä%'
OR      KDMAIL LIKE '%ö%'
OR      KDMAIL LIKE '%ü%'
OR      KDMAIL LIKE '%\%'
OR      KDMAIL LIKE '%\%'
OR      KDMAIL LIKE '%\%'
OR    len(replace(KDMAIL,'@','')) < len(KDMAIL) - 1 )
Ich weiß nicht um wie viele Adressen es dabei geht, vor allem wie viele davon wirklich falsch sind, aber ich tendiere dazu das wenn du weniger als 100 falsche hast du das einfach über das Frontend bereinigst oder bereinigen lässt.
 
Werbung:
Ich finde BI funktioniert sehr gut in Datenbanken, das soll aber jedem selbst überlassen sein.

Das Format einer E-Mail Adresse würde ich aber immer in der DB prüfen, ist doch auch nur ein Datentyp.
 
Zurück
Oben