Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Luciano Barletta
/
message-service
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
1
Wiki
Network
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit 1bcc9624
authored
2020-07-30 20:06:38 -0300
by
Tu Nombre
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
se agrega limite de envio y excepciones de dominios argentinos como nic.ar
1 parent
c0e4da59
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
96 additions
and
5 deletions
ValidacionTelefonos.py
Wpp1State.py
config.py
process.py
services.py
ValidacionTelefonos.py
View file @
1bcc962
...
...
@@ -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
...
...
Wpp1State.py
View file @
1bcc962
...
...
@@ -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
:
...
...
config.py
View file @
1bcc962
...
...
@@ -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
process.py
View file @
1bcc962
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
))
...
...
services.py
View file @
1bcc962
...
...
@@ -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"
)
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment