306 lines
10 KiB
Plaintext
306 lines
10 KiB
Plaintext
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
|