Commit 1bcc9624 by Tu Nombre

se agrega limite de envio y excepciones de dominios argentinos como nic.ar

1 parent c0e4da59
......@@ -23,6 +23,8 @@ PaisDom = ("ac","ad","ae","af","ag","ai","al","am","ao","aq","ar","as","at","au"
"ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tr","tt","tv","tw","tz","ua","ug","uk","us","uy","uz","va","vc","ve","vg","vi",
"vn","vu","wf","ws","ye","yt","za","zm","zw")
Ecepciones = ("gov.ar", "gob.ar", "edu.ar", "mil.ar", "nic.ar")
class ValidacionCorreo():
"""clase para revisar que los mails tengan los requisitos minimos para tratar de envia"""
def ValidarCorreo(self, correo):
......@@ -50,8 +52,10 @@ class ValidacionCorreo():
def validacionDominio(self, dominio):
"""si es un dominio valido, devuelve true sino false"""
d = dominio.split(".")
if d[-2]+d[-1] in Ecepciones:#Ecepcion a la validacion
return(True)
error = True
if len(d) > 3:
if len(d) > 3:#esta revision esta mal hay que repensarla
error = False
if 2 > len(d):
error = False
......
......@@ -43,12 +43,92 @@ class StatePhoneWs():
class StateMail():
"""Esta clase consulta el estado de los mail server y los cachea
la consulta tiene 60 segundos de valides, para mejorar la perfrmance"""
la consulta tiene 60 segundos de valides, para mejorar la perfrmance
y la cantidad de mails enviado por dia para no superar el limite de emision"""
def __init__(self):
self.Consultas = {}#{MailUSer-pass-host-str(port):{"hora": datetime.datetime.now, "estado": self.chequear_stado_WB(telefono)},}
self.MailRompedor = []
self.MailEnviado = {}
self.MailsEnviado = {}#"MAIL@HOST": n
self.MailsBloqueados = {}#"MAIL@HOST": datetimeDeDesbloqueo
def ChequearCuentaBlockeadaYEnviar(self, mail, smtphost):
"""Chequeo la cuenta para ver si esta llegando al limite de bloqueo
o si ya paso suficiente tiempo para volver a usarla"""
if False == self.CuentaBloqueada(mail):
return(False)
limite = self.MailEnviado(mail, smtphost)
if limite == False:
self.BloquearCuenta(mail)
return(limite)
def BloquearCuenta(self, mail):
"""Bloquea cuenta por un dia"""
tiempo = datetime.datetime.now() + datetime.timedelta(days=1)
self.MailsBloqueados[mail] = tiempo
self.MailsEnviado[mail] = []
return(True)
def CuentaBloqueada(self, mail):
"""si la cuenta esta bloqueada devuelve False
sino True.
Si esta bloqueada y paso el dia la desbloquea y devuelve True"""
try:
Fecha = self.MailsBloqueados[mail]
except:
return(True)#Si no esta en la lissta de bloqueados devuelvo True
if Fecha < datetime.datetime.now():#si paso el dia
self.MailsBloqueados.pop(mail, None)#Remuevo el mail de los bloqueados
return(True)
return(False)
def MailEnviado(self, mail, smtphost):
habilitado = True
if self._sumarMail(mail) > self.ArmarListadoLimitesHost(smtphost):
habilitado = False
return(habilitado)
def _sumarMail(self, mail):
"""Se agrega al dicionario si no existe si existe se le agrega
devuelve el resultado"""
try:
self.MailsEnviado[mail].append(datetime.datetime.now())
except:
self.MailsEnviado[mail] = []
self.MailsEnviado[mail].append(datetime.datetime.now())
#print("linea 94", self.MailsEnviado[mail])
LOG = []
for MAIL in self.MailsEnviado[mail]:
#print("linea 97", MAIL)
#print("linea 98", MAIL, datetime.datetime.now() + datetime.timedelta(days=1))
if MAIL < datetime.datetime.now() + datetime.timedelta(days=1):
LOG.append(MAIL)
self.MailsEnviado[mail] = LOG
#try:
# self.MailsEnviado[mail] = self.MailsEnviado[mail] + 1
#except:
# self.MailsEnviado[mail] = 0
resultado = len(self.MailsEnviado[mail])
print(resultado)
return(resultado)
def LimpiarListaMailEnviados(self):
self.MailsEnviado = {}
return("True")
def ArmarListadoLimitesHost(self, host):
"""Devuelve la cantidad de mails que se puede enviar diariamente
La lista de donde se toma esta informacion esta en un json
Mira la configuracion"""
with open(config.ArchivoLimitesHosts) as json_file:
data = json.load(json_file)
try:
n = data[host]
except:
n = config.LimiteDiario
return(n)
def chequear_stado_Server(self, User, Pass, Port, Host):
try:
......
......@@ -10,3 +10,6 @@ SMTP_PORT = 587
SMS_URL = "http://192.168.15.120:8080/v1/sms/send/"
folder = "msg/"
db = "/dev/shm/messages.db"
TimeQueqe = 30
LimiteDiario = 200
ArchivoLimitesHosts = "limites.json"
\ No newline at end of file
from services import serviceFactory
from database import DBconnection
from enums import Services, States, Datatypes, Table
import ipdb, os, json, datetime
import ipdb, os, json, datetime, config
class Process:
......@@ -64,7 +64,7 @@ class Process:
self.stateMail.MailRompedor = []
def _send(self,state,serv):
fin = datetime.datetime.now() + datetime.timedelta(seconds=15)
fin = datetime.datetime.now() + datetime.timedelta(seconds=config.TimeQueqe)
rows = self.conn.query("SELECT * FROM msg WHERE state = ? and serv = ? ",(state,serv))
if not len(rows) == 0:
print("cantidad pendiente ", serv, len(rows))
......
......@@ -238,6 +238,10 @@ class Mail(ServiceBase):
Host=smtp["host"])
if est == False:
raise NameError("Mail_Server_Fall")
#Ahora Probamos si no supero el limite de envios
lim = stadomail.ChequearCuentaBlockeadaYEnviar(smtp["username"], smtp["host"])
if lim == False:
raise NameError("Cuenta_Mail_Prebloqueda")
def SMTPcliente(self,msg, Serversmtp):
print("mail sale por cliente")
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!