View Full Version : Prüfung einer E-Mail-Adresse auf Gültigkeit mittels RPG-Programm
Schön, dass die Quelle nun nicht mehr abwärtskompatibel bereitgestellt wird.
Immerhin gibts die C-Funktionen schon seit V5R4.
Das war früher auch anders...
Moin,
das funz gut, haben wir auch so gemacht. Kann eigentich auch der mx record abgefragt werden? Konkret habe wir eine Mailadresse die wie folgt lautet:
Name_Name.de - Lt DNS ungültig Antwort im STRDNSQRY ist NSDOMAIN,
wenn aber strdnsqry -> set type=mx, dann Name_Name.de eingegeben wird, dann kommt:
Name_Name.de mailexchanger = 10 .mailbox.Name_Name.de
Damit ist die Adresse gültig, obwohl es keine Domain gibt.
mfg
DKSPROFI
Moin,
vieleicht etwas kompatibler:
d P_Host S 128A
d inet_addr PR 10U 0 ExtProc('inet_addr')
d address_str * value options(*string)
d INADDR_NONE C CONST(4294967295)
d inet_ntoa PR * ExtProc('inet_ntoa')
d internet_addr 10U 0 value
d p_hostent S *
d hostent DS Based(p_hostent)
d h_name *
d h_aliases *
d h_addrtype 10I 0
d h_length 10I 0
d h_addr_list *
d p_h_addr S * Based(h_addr_list)
d h_addr S 10U 0 Based(p_h_addr)
d gethostbyname PR * extproc('gethostbyname')
d host_name * value options(*string)
D IP S 10U 0
P_Host = 'www.web.de ' ;
IP = inet_addr(%trim(P_host)) ;
If IP = INADDR_NONE ;
p_hostent = gethostbyname(%trim(P_host)) ;
If p_hostent <> *NULL ;
IP = h_addr ;
EndIf ;
EndIf ;
If IP = INADDR_NONE ;
// Fehler
Else ;
// Kein Fehler
EndIf ;
*InLr = *On ;
mfg
DKSPROFI
Moin,
und nochmals Old School:
H DFTACTGRP(*NO) ACTGRP(*NEW)
D inet_addr PR 10U 0 ExtProc('inet_addr')
D address_str * value options(*string)
D INADDR_NONE C CONST(4294967295)
D inet_ntoa PR * ExtProc('inet_ntoa')
D internet_addr 10U 0 value
D p_hostent S *
D hostent DS Based(p_hostent)
D h_name *
D h_aliases *
D h_addrtype 10I 0
D h_length 10I 0
D h_addr_list *
D p_h_addr S * Based(h_addr_list)
D h_addr S 10U 0 Based(p_h_addr)
D gethostbyname PR * extproc('gethostbyname')
D host_name * value options(*string)
D host S 32A
D IP S 10U 0
D Msg S 50A
c *entry plist
c parm host
c eval IP = inet_addr(%trim(host))
c if IP = INADDR_NONE
c eval p_hostent = gethostbyname(%trim(host))
c if p_hostent <> *NULL
c eval IP = h_addr
c endif
c endif
c if IP = INADDR_NONE
c eval Msg = 'Host not found!'
c else
c eval Msg = 'IP = ' + %str(inet_ntoa(IP))
c endif
c dsply Msg
c eval *inlr = *on
mfg
DKSPROFI
Nun, ein DNS-Server kann auch eine IP-Adresse "127.0.53.53" als gültige IP melden.
Diese IP-Adresse gilt als sog. Konflikt-Adresse.
Auf dieses Problem bin ich nun gestoßen, da es die neue Endung ".box" gibt.
Da aber alle Fritzboxen nun intern generell als Domain "fritz.box" fest und nicht veränderbar eingestellt haben, liefert eine DNS-Auflösung nun grundsätzlich obige Adresse.
Die tatsächlichen IP-Adressen sind nicht mehr erfragbar.
Ja gut, hat mit dem Thema nur indirekt zu tun.
Aber wenn ihr die obige Adresse erhaltet muss das nicht unbedingt falsch sein, auch wenn das gewünschte Ziel ohne Kenntnis der echten IP nicht mehr erreichbar ist.
Falls du 7.2 im Einsatz hast kannst du mit Regex einen großteil der Prüfung durchführen lassen.
Da du ja auch in RPG einfach SQL Funktionen einbauen kannst.
Musst dir im Internet nur den richtigen Pattern holen und dann ist es ein 1-Zeiler.
lg Andreas
Hi,
ja sowas stelle ich mir vor.
Allerdings ist mir die Syntax nicht ganz klar .
Wir haben V7R2 und die ERGEXP_Like funktionieren.
Hier mal ein Beispiel :
select 'x' from sysibm/sysdummy1
where not
(REGEXP_like('q@m@Pr.de','([\w-\.]+)@((?:[\w]+\.)+)([-zA-Z]{2,4})'
))
Das Beispiel ist zwar noch falsch, aber SQL klappt.
andreaspr@aon.at
24-03-17, 11:47
http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/20747-SQL-regular-expression?p=100740#post100740