OPTIONS SHORT CIRCUIT IMPORT util IMPORT com FUNCTION apiclient(pemail) DEFINE data_apilayer RECORD email,did_you_mean,USER,domain,syntax_valid STRING, is_disposable,is_role_account,is_catch_all,is_deliverable,can_connect_smtp, is_inbox_full,is_disabled,mx_records,FREE,score BOOLEAN END RECORD DEFINE data RECORD data RECORD status , result, deprecation_notice string, score smallint, email string, regexp, gibberish, disposable, webmail, mx_records, smtp_server, smtp_check, accept_all, block BOOLEAN END RECORD, source DYNAMIC ARRAY OF STRING, meta RECORD param STRING END RECORD END RECORD DEFINE data_ipq RECORD MESSAGE STRING, success, valid, disposable BOOLEAN, smtp_score , overall_score DEC(10,2), first_name string, generic, common, dns_valid, honeypot BOOLEAN, deliverability STRING, frequent_complainer BOOLEAN, spam_trap_score STRING, catch_all, timed_out, suspect, recent_abuse BOOLEAN, fraud_score DEC(10,2), suggested_domain string, leaked BOOLEAN END RECORD DEFINE estado,purl,cmd,res, msg,s,pemail,tiposervice STRING, ret INT # LA API PARA VERIFICAR ESTA OFFLINE 29/05/2025 { LET estado = 'VALIDO' LET ret = 200 RETURN estado,ret } # SE DEVUELVE SI EL EMAIL ESTA EN BLANCO IF pemail IS NULL THEN LET ret = 400 LET estado = 'DEBES DIGITAR EL EMAIL POR FAVOR' RETURN estado,ret END IF DISPLAY "llego: ",pemail # ELECCION DE SERVICIOS, POR EL MOMENTO ES IPQUALITY SELECT a.IDENTIFICACION INTO tiposervice FROM APIS a WHERE a.estado = 'ONLINE' IF STATUS = NOTFOUND THEN RETURN estado,ret END IF # LET tiposervice = 'ipq1' IF tiposervice = 'HUNTER' THEN LET purl = "https://api.hunter.io/v2/email-verifier?email=",pemail CLIPPED,"&api_key=2a50343f3a2842b082ee2c4b3ecccaf4ae5a7766" CALL ipquality_send_command(purl) RETURNING ret,res DISPLAY "response api: ",res," longitud: ",res.getLength() IF res.getLength() =0 THEN INSERT INTO envia_email_log (email,estado,fecha,programa_envio,us_crea,score) VALUES (pemail,data.data.status,getdate(),'mt101_hunter',suser_Sname(),data.data.score) LET ret = 400 LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' RETURN estado,ret END IF TRY CALL util.JSON.parse(res,data) CATCH LET ret = 400 LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' RETURN estado,ret END TRY # INSERT INTO envia_email_log (email,estado,fecha,programa_envio,us_crea,score) # VALUES (pemail,data.data.status,getdate(),'forzado',suser_Sname(),data.data.score) # LET estado = 'VALIDO' # LET ret = 200 # RETURN estado,ret LET s = util.JSON.stringify(res) DISPLAY "DATA EMAIL: ",pemail CLIPPED, " score: ",data.data.score INSERT INTO envia_email_log (email,estado,fecha,programa_envio,us_crea,score) VALUES (pemail,data.data.status,getdate(),'mt101_hunter',suser_Sname(),data.data.score) IF ret ==0 THEN IF data.data.mx_records = TRUE THEN LET estado = 'VALIDO' LET ret = 200 RETURN estado,ret ELSE LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' LET ret = 400 RETURN estado,ret END IF IF data.data.smtp_server = TRUE THEN LET estado = 'VALIDO' LET ret = 200 RETURN estado,ret ELSE LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' LET ret = 400 RETURN estado,ret END IF IF data.data.regexp = TRUE THEN LET estado = 'VALIDO' LET ret = 200 RETURN estado,ret ELSE LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' LET ret = 400 RETURN estado,ret END IF IF data.data.disposable = TRUE THEN LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' LET ret = 400 RETURN estado,ret ELSE LET estado = 'VALIDO' LET ret = 200 RETURN estado,ret END IF IF (data.data.status = 'valid' OR data.data.status = 'accept_all' OR data.data.status = 'unknown') AND data.data.score > 29 THEN LET estado = 'VALIDO' LET ret = 200 RETURN estado,ret ELSE LET ret = 400 LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' RETURN estado,ret END IF END IF END IF IF tiposervice = 'IPQUALITY' THEN LET purl = 'https://ipqualityscore.com/api/json/email/cHZNnfXkbJDtx43YcrQqHSjXzBrndwT3/',pemail CLIPPED CALL ipquality_send_command(purl) RETURNING ret,res IF ret ==0 THEN LET s = util.JSON.stringify(res) CALL util.JSON.parse(res,data_ipq) IF data_ipq.valid THEN LET estado = 'VALIDO' LET ret = 200 ELSE LET ret = 400 LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' END IF END IF END IF IF tiposervice = 'APILAYER' THEN # DISPLAY " ESTOY EN APILAYER" LET purl= "https://api.apilayer.com/email_verification/",pemail CLIPPED CALL apilayer_send_command(purl, cmd) RETURNING ret, res # DISPLAY "res ",res," ",ret IF ret ==0 THEN LET s = util.JSON.stringify(res) CALL util.JSON.parse(res,data_apilayer) IF data_apilayer.can_connect_smtp THEN LET estado = 'VALIDO' LET ret = 200 ELSE LET ret = 400 LET estado = 'NO SE PUEDE ENTREGAR MENSAJE A ESTA DIRECCION EMAIL' END IF # DISPLAY "sintax ",data.syntax_valid," deliv ",data.is_deliverable ELSE IF ret = 429 THEN LET ret = 200 LET estado ='VALIDO POR EXESO DE REQUEST' ELSE LET ret = 400 LET estado = 'NO FUE POSIBLE LA CONEXION, ' END IF END IF END IF # LET ret = 200 DISPLAY "en return ",estado," ",ret RETURN estado,ret END FUNCTION # ## Communications library using com (http or https) # FUNCTION apilayer_send_command(url, cmd) DEFINE url, cmd STRING DEFINE result, tmp STRING DEFINE http_req com.HTTPRequest DEFINE http_resp com.HTTPResponse TRY UPDATE apis SET cuenta = cuenta + 1 WHERE estado = 'ONLINE' LET http_req = com.HTTPRequest.Create(url) CALL http_req.setHeader("api_key","2a50343f3a2842b082ee2c4b3ecccaf4ae5a7766") CALL http_req.doRequest() LET http_resp=http_req.getResponse() IF http_resp.getStatusCode() != 200 THEN RETURN http_resp.getStatusCode(), http_resp.getStatusDescription() END IF LET tmp = http_resp.getStatusDescription() IF (tmp == "OK" || tmp == "no error" ) THEN RETURN -1, SFMT("HTTP request status description: %1 ",tmp) END IF LET result = http_resp.getTextResponse() CATCH RETURN -2, SFMT("HTTP request error: STATUS=%1 (%2)",STATUS,SQLCA.sqlerrd[2]) END TRY RETURN 0, result END FUNCTION FUNCTION ipquality_send_command(url) DEFINE url, cmd STRING DEFINE result, tmp STRING DEFINE http_req com.HTTPRequest DEFINE http_resp com.HTTPResponse DISPLAY "url", url TRY LET http_req = com.HTTPRequest.Create(url) CALL http_req.setHeader("apikey","cHZNnfXkbJDtx43YcrQqHSjXzBrndwT3") CALL http_req.doRequest() LET http_resp=http_req.getResponse() IF http_resp.getStatusCode() != 200 THEN RETURN http_resp.getStatusCode(), http_resp.getStatusDescription() END IF LET tmp = http_resp.getStatusDescription() IF (tmp == "OK" || tmp == "no error" ) THEN RETURN -1, SFMT("HTTP request status description: %1 ",tmp) END IF LET result = http_resp.getTextResponse() CATCH RETURN -2, SFMT("HTTP request error: STATUS=%1 (%2)",STATUS,SQLCA.sqlerrd[2]) END TRY RETURN 0, result END FUNCTION