[IMP] mail_tracking_mailgun: black, isort

This commit is contained in:
hveficent 2020-04-02 11:15:00 +02:00 committed by nicolas
parent 6ca2da29cf
commit 5892f7db62
59 changed files with 772 additions and 718 deletions

View File

@ -9,16 +9,10 @@
"version": "12.0.1.0.2",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "Tecnativa, "
"Odoo Community Association (OCA)",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
'installable': True,
"depends": [
"mail_tracking",
],
"data": [
"views/res_partner.xml",
"views/mail_tracking_email.xml",
]
"installable": True,
"depends": ["mail_tracking"],
"data": ["views/res_partner.xml", "views/mail_tracking_email.xml"],
}

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -49,7 +49,7 @@ msgstr ""
"prevenir problemas con los envíos"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr "¡Se necesita un valor de dominio para Mailgun!\""
@ -70,7 +70,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr "No se ha podido obtener información desde Mailgun"
@ -94,7 +94,7 @@ msgid "Error %s trying to check mailof connection"
msgstr "Error %s al intentar comprobar el correo electrónicodeconexión"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr "La información del evento ha caducado"
@ -143,13 +143,13 @@ msgid "Set Bounced"
msgstr "Marcar como rebotado"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr "¡No hay clave de API de Mailgun!"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -48,7 +48,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -69,7 +69,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -90,7 +90,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -137,13 +137,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -135,13 +135,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -45,7 +45,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -66,7 +66,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -87,7 +87,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -134,13 +134,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -135,13 +135,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -32,7 +32,7 @@ msgid "%s is not a valid email address. Please check it in order to avoid sendin
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -53,7 +53,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -73,7 +73,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -120,13 +120,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -135,13 +135,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -45,7 +45,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -66,7 +66,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -87,7 +87,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -134,13 +134,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -51,7 +51,7 @@ msgstr ""
"evitar problemas de envio"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr "É necessário um valor no domínio do Mailgun!"
@ -72,7 +72,7 @@ msgid "Contact"
msgstr "Contacto"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr "Não foi possível obter informação do Mailgun"
@ -96,7 +96,7 @@ msgid "Error %s trying to check mailof connection"
msgstr "Erro %s ao tentar verificar o mailof da conexão"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr "A informação do evento já não está armazenada"
@ -144,13 +144,13 @@ msgid "Set Bounced"
msgstr "Marcar como Devolvido"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr "Não há chave de API do Mailgun!"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr "Não há mensagem rastreada!"

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -45,7 +45,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -66,7 +66,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -87,7 +87,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -134,13 +134,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -9,16 +9,15 @@ msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:19+0000\n"
"PO-Revision-Date: 2020-03-30 22:13+0000\n"
"Last-Translator: Matjaz Mozetic <matjaz@matmoz.si>\n"
"PO-Revision-Date: 2017-12-01 02:19+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
"n%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 3.10\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/res_partner.py:92
@ -45,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -63,10 +62,10 @@ msgstr ""
#. module: mail_tracking_mailgun
#: model:ir.model,name:mail_tracking_mailgun.model_res_partner
msgid "Contact"
msgstr "Stik"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -87,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -134,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -45,7 +45,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -66,7 +66,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -87,7 +87,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -134,13 +134,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -43,7 +43,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -64,7 +64,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -85,7 +85,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -132,13 +132,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -44,7 +44,7 @@ msgid ""
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:77
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#, python-format
msgid "A Mailgun domain value is needed!"
msgstr ""
@ -65,7 +65,7 @@ msgid "Contact"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:241
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:239
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -86,7 +86,7 @@ msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:245
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:243
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -133,13 +133,13 @@ msgid "Set Bounced"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:71
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:69
#, python-format
msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:228
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:226
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import json
from odoo import models
@ -10,11 +11,12 @@ class IrMailServer(models.Model):
def _tracking_headers_add(self, tracking_email_id, headers):
headers = super(IrMailServer, self)._tracking_headers_add(
tracking_email_id, headers)
tracking_email_id, headers
)
headers = headers or {}
metadata = {
'odoo_db': self.env.cr.dbname,
'tracking_email_id': tracking_email_id,
"odoo_db": self.env.cr.dbname,
"tracking_email_id": tracking_email_id,
}
headers['X-Mailgun-Variables'] = json.dumps(metadata)
headers["X-Mailgun-Variables"] = json.dumps(metadata)
return headers

View File

@ -4,13 +4,15 @@
import hashlib
import hmac
import requests
import logging
from datetime import datetime
import requests
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.tools import email_split
import logging
_logger = logging.getLogger(__name__)
@ -20,159 +22,174 @@ class MailTrackingEmail(models.Model):
def _country_search(self, country_code):
country = False
if country_code:
country = self.env['res.country'].search([
('code', '=', country_code.upper()),
])
country = self.env["res.country"].search(
[("code", "=", country_code.upper())]
)
if country:
return country.id
return False
@property
def _mailgun_mandatory_fields(self):
return ('event', 'timestamp', 'token', 'signature',
'tracking_email_id', 'odoo_db')
return (
"event",
"timestamp",
"token",
"signature",
"tracking_email_id",
"odoo_db",
)
@property
def _mailgun_event_type_mapping(self):
return {
# Mailgun event type: tracking event type
'delivered': 'delivered',
'opened': 'open',
'clicked': 'click',
'unsubscribed': 'unsub',
'complained': 'spam',
'bounced': 'hard_bounce',
'dropped': 'reject',
'accepted': 'sent',
'failed': 'error',
'rejected': 'error',
"delivered": "delivered",
"opened": "open",
"clicked": "click",
"unsubscribed": "unsub",
"complained": "spam",
"bounced": "hard_bounce",
"dropped": "reject",
"accepted": "sent",
"failed": "error",
"rejected": "error",
}
def _mailgun_event_type_verify(self, event):
event = event or {}
mailgun_event_type = event.get('event')
mailgun_event_type = event.get("event")
if mailgun_event_type not in self._mailgun_event_type_mapping:
_logger.error("Mailgun: event type '%s' not supported",
mailgun_event_type)
_logger.error("Mailgun: event type '%s' not supported", mailgun_event_type)
return False
# OK, event type is valid
return True
def _mailgun_signature(self, api_key, timestamp, token):
return hmac.new(
key=bytes(api_key, 'utf-8'),
msg=bytes('{}{}'.format(str(timestamp), str(token)), 'utf-8'),
digestmod=hashlib.sha256).hexdigest()
key=bytes(api_key, "utf-8"),
msg=bytes("{}{}".format(str(timestamp), str(token)), "utf-8"),
digestmod=hashlib.sha256,
).hexdigest()
def _mailgun_values(self):
icp = self.env['ir.config_parameter'].sudo()
api_key = icp.get_param('mailgun.apikey')
icp = self.env["ir.config_parameter"].sudo()
api_key = icp.get_param("mailgun.apikey")
if not api_key:
raise ValidationError(_('There is no Mailgun API key!'))
api_url = icp.get_param(
'mailgun.api_url', 'https://api.mailgun.net/v3')
catchall_domain = icp.get_param('mail.catchall.domain')
domain = icp.get_param('mailgun.domain', catchall_domain)
raise ValidationError(_("There is no Mailgun API key!"))
api_url = icp.get_param("mailgun.api_url", "https://api.mailgun.net/v3")
catchall_domain = icp.get_param("mail.catchall.domain")
domain = icp.get_param("mailgun.domain", catchall_domain)
if not domain:
raise ValidationError(_('A Mailgun domain value is needed!'))
validation_key = icp.get_param('mailgun.validation_key')
raise ValidationError(_("A Mailgun domain value is needed!"))
validation_key = icp.get_param("mailgun.validation_key")
return api_key, api_url, domain, validation_key
def _mailgun_signature_verify(self, event):
event = event or {}
icp = self.env['ir.config_parameter'].sudo()
api_key = icp.get_param('mailgun.apikey')
icp = self.env["ir.config_parameter"].sudo()
api_key = icp.get_param("mailgun.apikey")
if not api_key:
_logger.warning("No Mailgun api key configured. "
"Please add 'mailgun.apikey' to System parameters "
"to enable Mailgun authentication webhoook "
"requests. More info at: "
"https://documentation.mailgun.com/"
"user_manual.html#webhooks")
_logger.warning(
"No Mailgun api key configured. "
"Please add 'mailgun.apikey' to System parameters "
"to enable Mailgun authentication webhoook "
"requests. More info at: "
"https://documentation.mailgun.com/"
"user_manual.html#webhooks"
)
else:
timestamp = event.get('timestamp')
token = event.get('token')
signature = event.get('signature')
timestamp = event.get("timestamp")
token = event.get("token")
signature = event.get("signature")
event_digest = self._mailgun_signature(api_key, timestamp, token)
if signature != event_digest:
_logger.error("Mailgun: Invalid signature '%s' != '%s'",
signature, event_digest)
_logger.error(
"Mailgun: Invalid signature '%s' != '%s'", signature, event_digest
)
return False
# OK, signature is valid
return True
def _db_verify(self, event):
event = event or {}
odoo_db = event.get('odoo_db')
odoo_db = event.get("odoo_db")
current_db = self.env.cr.dbname
if odoo_db != current_db:
_logger.error("Mailgun: Database '%s' is not the current database",
odoo_db)
_logger.error("Mailgun: Database '%s' is not the current database", odoo_db)
return False
# OK, DB is current
return True
def _mailgun_metadata(self, mailgun_event_type, event, metadata):
# Get Mailgun timestamp when found
ts = event.get('timestamp', False)
ts = event.get("timestamp", False)
try:
ts = float(ts)
except Exception:
ts = False
if ts:
dt = datetime.utcfromtimestamp(ts)
metadata.update({
'timestamp': ts,
'time': fields.Datetime.to_string(dt),
'date': fields.Date.to_string(dt),
'mailgun_id': event.get('id', False)
})
metadata.update(
{
"timestamp": ts,
"time": fields.Datetime.to_string(dt),
"date": fields.Date.to_string(dt),
"mailgun_id": event.get("id", False),
}
)
# Common field mapping
mapping = {
'recipient': 'recipient',
'ip': 'ip',
'user_agent': 'user-agent',
'os_family': 'client-os',
'ua_family': 'client-name',
'ua_type': 'client-type',
'url': 'url',
"recipient": "recipient",
"ip": "ip",
"user_agent": "user-agent",
"os_family": "client-os",
"ua_family": "client-name",
"ua_type": "client-type",
"url": "url",
}
for k, v in mapping.items():
if event.get(v, False):
metadata[k] = event[v]
# Special field mapping
metadata.update({
'mobile': event.get('device-type') in {'mobile', 'tablet'},
'user_country_id': self._country_search(
event.get('country', False)),
})
metadata.update(
{
"mobile": event.get("device-type") in {"mobile", "tablet"},
"user_country_id": self._country_search(event.get("country", False)),
}
)
# Mapping for special events
if mailgun_event_type == 'bounced':
metadata.update({
'error_type': event.get('code', False),
'error_description': event.get('error', False),
'error_details': event.get('notification', False),
})
elif mailgun_event_type == 'dropped':
metadata.update({
'error_type': event.get('reason', False),
'error_description': event.get('code', False),
'error_details': event.get('description', False),
})
elif mailgun_event_type == 'complained':
metadata.update({
'error_type': 'spam',
'error_description':
"Recipient '%s' mark this email as spam" %
event.get('recipient', False),
})
if mailgun_event_type == "bounced":
metadata.update(
{
"error_type": event.get("code", False),
"error_description": event.get("error", False),
"error_details": event.get("notification", False),
}
)
elif mailgun_event_type == "dropped":
metadata.update(
{
"error_type": event.get("reason", False),
"error_description": event.get("code", False),
"error_details": event.get("description", False),
}
)
elif mailgun_event_type == "complained":
metadata.update(
{
"error_type": "spam",
"error_description": "Recipient '%s' mark this email as spam"
% event.get("recipient", False),
}
)
return metadata
def _mailgun_tracking_get(self, event):
tracking = False
tracking_email_id = event.get('tracking_email_id', False)
tracking_email_id = event.get("tracking_email_id", False)
if tracking_email_id and tracking_email_id.isdigit():
tracking = self.search([('id', '=', tracking_email_id)], limit=1)
tracking = self.search([("id", "=", tracking_email_id)], limit=1)
return tracking
def _event_is_from_mailgun(self, event):
@ -182,35 +199,35 @@ class MailTrackingEmail(models.Model):
@api.model
def event_process(self, request, post, metadata, event_type=None):
res = super(MailTrackingEmail, self).event_process(
request, post, metadata, event_type=event_type)
if res == 'NONE' and self._event_is_from_mailgun(post):
request, post, metadata, event_type=event_type
)
if res == "NONE" and self._event_is_from_mailgun(post):
if not self._mailgun_signature_verify(post):
res = 'ERROR: Signature'
res = "ERROR: Signature"
elif not self._mailgun_event_type_verify(post):
res = 'ERROR: Event type not supported'
res = "ERROR: Event type not supported"
elif not self._db_verify(post):
res = 'ERROR: Invalid DB'
res = "ERROR: Invalid DB"
else:
res = 'OK'
if res == 'OK':
mailgun_event_type = post.get('event')
mapped_event_type = self._mailgun_event_type_mapping.get(
mailgun_event_type) or event_type
res = "OK"
if res == "OK":
mailgun_event_type = post.get("event")
mapped_event_type = (
self._mailgun_event_type_mapping.get(mailgun_event_type) or event_type
)
if not mapped_event_type: # pragma: no cover
res = 'ERROR: Bad event'
res = "ERROR: Bad event"
tracking = self._mailgun_tracking_get(post)
if not tracking:
res = 'ERROR: Tracking not found'
if res == 'OK':
res = "ERROR: Tracking not found"
if res == "OK":
# Complete metadata with mailgun event info
metadata = self._mailgun_metadata(
mailgun_event_type, post, metadata)
metadata = self._mailgun_metadata(mailgun_event_type, post, metadata)
# Create event
tracking.event_create(mapped_event_type, metadata)
if res != 'NONE':
if res != "NONE":
if event_type:
_logger.info(
"Mailgun: event '%s' process '%s'", event_type, res)
_logger.info("Mailgun: event '%s' process '%s'", event_type, res)
else:
_logger.info("Mailgun: event process '%s'", res)
return res
@ -225,21 +242,21 @@ class MailTrackingEmail(models.Model):
api_key, api_url, domain, validation_key = self._mailgun_values()
for tracking in self:
if not tracking.mail_message_id:
raise UserError(_('There is no tracked message!'))
message_id = tracking.mail_message_id.message_id.replace(
"<", "").replace(">", "")
raise UserError(_("There is no tracked message!"))
message_id = tracking.mail_message_id.message_id.replace("<", "").replace(
">", ""
)
res = requests.get(
'%s/%s/events' % (api_url, domain),
"{}/{}/events".format(api_url, domain),
auth=("api", api_key),
params={
"begin": tracking.timestamp,
"ascending": "yes",
"message-id": message_id,
}
},
)
if not res or res.status_code != 200:
raise ValidationError(_(
"Couldn't retrieve Mailgun information"))
raise ValidationError(_("Couldn't retrieve Mailgun information"))
content = res.json()
if "items" not in content:
raise ValidationError(_("Event information not longer stored"))
@ -247,12 +264,11 @@ class MailTrackingEmail(models.Model):
# mailgun event hasn't been synced and recipient is the same as
# in the evaluated tracking. We use email_split since tracking
# recipient could come in format: "example" <to@dest.com>
if not self.env['mail.tracking.event'].search(
[('mailgun_id', '=', item["id"])]) and (
item.get("recipient", "") ==
email_split(tracking.recipient)[0]):
if not self.env["mail.tracking.event"].search(
[("mailgun_id", "=", item["id"])]
) and (item.get("recipient", "") == email_split(tracking.recipient)[0]):
mapped_event_type = self._mailgun_event_type_mapping.get(
item["event"], item["event"])
metadata = self._mailgun_metadata(
mapped_event_type, item, {})
item["event"], item["event"]
)
metadata = self._mailgun_metadata(mapped_event_type, item, {})
tracking.event_create(mapped_event_type, metadata)

View File

@ -1,20 +1,17 @@
# Copyright 2017 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields
from odoo import fields, models
class MailTrackingEvent(models.Model):
_inherit = "mail.tracking.event"
mailgun_id = fields.Char(
string="Mailgun Event ID",
copy="False",
readonly=True,
)
mailgun_id = fields.Char(string="Mailgun Event ID", copy="False", readonly=True)
def _process_data(self, tracking_email, metadata, event_type, state):
res = super(MailTrackingEvent, self)._process_data(
tracking_email, metadata, event_type, state)
res.update({'mailgun_id': metadata.get('mailgun_id', False)})
tracking_email, metadata, event_type, state
)
res.update({"mailgun_id": metadata.get("mailgun_id", False)})
return res

View File

@ -11,12 +11,13 @@ from odoo.exceptions import UserError
class ResPartner(models.Model):
_inherit = 'res.partner'
_inherit = "res.partner"
@api.multi
def email_bounced_set(self, tracking_emails, reason, event=None):
res = super(ResPartner, self).email_bounced_set(
tracking_emails, reason, event=event)
tracking_emails, reason, event=event
)
self._email_bounced_set(reason, event)
return res
@ -25,14 +26,19 @@ class ResPartner(models.Model):
for partner in self:
if not partner.email:
continue
event = event or self.env['mail.tracking.event']
event = event or self.env["mail.tracking.event"]
event_str = """
<a href="#"
data-oe-model="mail.tracking.event" data-oe-id="%d">%s</a>
""" % (event.id or 0, event.id or _('unknown'))
body = _('Email has been bounced: %s\n'
'Reason: %s\n'
'Event: %s') % (partner.email, reason, event_str)
""" % (
event.id or 0,
event.id or _("unknown"),
)
body = _("Email has been bounced: %s\nReason: %s\nEvent: %s") % (
partner.email,
reason,
event_str,
)
partner.message_post(body=body)
@api.multi
@ -43,55 +49,82 @@ class ResPartner(models.Model):
https://documentation.mailgun.com/en/latest/api-email-validation.html
"""
api_key, api_url, domain, validation_key = self.env[
'mail.tracking.email']._mailgun_values()
"mail.tracking.email"
]._mailgun_values()
if not validation_key:
raise UserError(_('You need to configure mailgun.validation_key'
' in order to be able to check mails validity'))
for partner in self.filtered('email'):
raise UserError(
_(
"You need to configure mailgun.validation_key"
" in order to be able to check mails validity"
)
)
for partner in self.filtered("email"):
res = requests.get(
# Validation API url is always the same
'https://api.mailgun.net/v3/address/validate',
auth=("api", validation_key), params={
"address": partner.email,
"mailbox_verification": True,
})
if not res or res.status_code != 200 and not self.env.context.get(
'mailgun_auto_check'):
raise UserError(_(
'Error %s trying to '
'check mail' % res.status_code or 'of connection'))
"https://api.mailgun.net/v3/address/validate",
auth=("api", validation_key),
params={"address": partner.email, "mailbox_verification": True},
)
if (
not res
or res.status_code != 200
and not self.env.context.get("mailgun_auto_check")
):
raise UserError(
_(
"Error %s trying to check mail" % res.status_code
or "of connection"
)
)
content = res.json()
if 'mailbox_verification' not in content:
if not self.env.context.get('mailgun_auto_check'):
if "mailbox_verification" not in content:
if not self.env.context.get("mailgun_auto_check"):
raise UserError(
_("Mailgun Error. Mailbox verification value wasn't"
" returned"))
_(
"Mailgun Error. Mailbox verification value wasn't"
" returned"
)
)
# Not a valid address: API sets 'is_valid' as False
# and 'mailbox_verification' as None
if not content['is_valid']:
if not content["is_valid"]:
partner.email_bounced = True
body = _('%s is not a valid email address. Please check it'
' in order to avoid sending issues') % partner.email
if not self.env.context.get('mailgun_auto_check'):
body = (
_(
"%s is not a valid email address. Please check it"
" in order to avoid sending issues"
)
% partner.email
)
if not self.env.context.get("mailgun_auto_check"):
raise UserError(body)
partner.message_post(body=body)
# If the mailbox is not valid API returns 'mailbox_verification'
# as a string with value 'false'
if content['mailbox_verification'] == 'false':
if content["mailbox_verification"] == "false":
partner.email_bounced = True
body = _('%s failed the mailbox verification. Please check it'
' in order to avoid sending issues') % partner.email
if not self.env.context.get('mailgun_auto_check'):
body = (
_(
"%s failed the mailbox verification. Please check it"
" in order to avoid sending issues"
)
% partner.email
)
if not self.env.context.get("mailgun_auto_check"):
raise UserError(body)
partner.message_post(body=body)
# If Mailgun can't complete the validation request the API returns
# 'mailbox_verification' as a string set to 'unknown'
if content['mailbox_verification'] == 'unknown':
if not self.env.context.get('mailgun_auto_check'):
if content["mailbox_verification"] == "unknown":
if not self.env.context.get("mailgun_auto_check"):
raise UserError(
_("%s couldn't be verified. Either the request couln't"
" be completed or the mailbox provider doesn't "
"support email verification") % (partner.email))
_(
"%s couldn't be verified. Either the request couln't"
" be completed or the mailbox provider doesn't "
"support email verification"
)
% (partner.email)
)
@api.multi
def check_email_bounced(self):
@ -101,11 +134,13 @@ class ResPartner(models.Model):
https://documentation.mailgun.com/en/latest/api-suppressions.html
"""
api_key, api_url, domain, validation_key = self.env[
'mail.tracking.email']._mailgun_values()
"mail.tracking.email"
]._mailgun_values()
for partner in self:
res = requests.get(
'%s/%s/bounces/%s' % (api_url, domain, partner.email),
auth=("api", api_key))
"{}/{}/bounces/{}".format(api_url, domain, partner.email),
auth=("api", api_key),
)
if res.status_code == 200 and not partner.email_bounced:
partner.email_bounced = True
elif res.status_code == 404 and partner.email_bounced:
@ -119,14 +154,15 @@ class ResPartner(models.Model):
https://documentation.mailgun.com/en/latest/api-suppressions.html
"""
api_key, api_url, domain, validation_key = self.env[
'mail.tracking.email']._mailgun_values()
"mail.tracking.email"
]._mailgun_values()
for partner in self:
res = requests.post(
'%s/%s/bounces' % (api_url, domain),
"{}/{}/bounces".format(api_url, domain),
auth=("api", api_key),
data={'address': partner.email})
partner.email_bounced = (
res.status_code == 200 and not partner.email_bounced)
data={"address": partner.email},
)
partner.email_bounced = res.status_code == 200 and not partner.email_bounced
@api.multi
def force_unset_bounced(self):
@ -136,30 +172,31 @@ class ResPartner(models.Model):
https://documentation.mailgun.com/en/latest/api-suppressions.html
"""
api_key, api_url, domain, validation_key = self.env[
'mail.tracking.email']._mailgun_values()
"mail.tracking.email"
]._mailgun_values()
for partner in self:
res = requests.delete(
'%s/%s/bounces/%s' % (api_url, domain, partner.email),
auth=("api", api_key))
"{}/{}/bounces/{}".format(api_url, domain, partner.email),
auth=("api", api_key),
)
if res.status_code in (200, 404) and partner.email_bounced:
partner.email_bounced = False
def _autocheck_partner_email(self):
for partner in self:
partner.with_context(
mailgun_auto_check=True).check_email_validity()
partner.with_context(mailgun_auto_check=True).check_email_validity()
@api.model
def create(self, vals):
if ('email' in vals and
self.env['ir.config_parameter'].sudo().get_param(
'mailgun.auto_check_partner_email')):
if "email" in vals and self.env["ir.config_parameter"].sudo().get_param(
"mailgun.auto_check_partner_email"
):
self._autocheck_partner_email()
return super(ResPartner, self).create(vals)
def write(self, vals):
if ('email' in vals and
self.env['ir.config_parameter'].sudo().get_param(
'mailgun.auto_check_partner_email')):
if "email" in vals and self.env["ir.config_parameter"].sudo().get_param(
"mailgun.auto_check_partner_email"
):
self._autocheck_partner_email()
return super(ResPartner, self).write(vals)

View File

@ -2,205 +2,199 @@
# Copyright 2017 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tools import mute_logger
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError, ValidationError
import mock
_packagepath = 'odoo.addons.mail_tracking_mailgun'
from odoo.exceptions import UserError, ValidationError
from odoo.tests.common import TransactionCase
from odoo.tools import mute_logger
_packagepath = "odoo.addons.mail_tracking_mailgun"
class TestMailgun(TransactionCase):
def mail_send(self):
mail = self.env['mail.mail'].create({
'subject': 'Test subject',
'email_from': 'from@example.com',
'email_to': self.recipient,
'body_html': '<p>This is a test message</p>',
})
mail = self.env["mail.mail"].create(
{
"subject": "Test subject",
"email_from": "from@example.com",
"email_to": self.recipient,
"body_html": "<p>This is a test message</p>",
}
)
mail.send()
# Search tracking created
tracking_email = self.env['mail.tracking.email'].search([
('mail_id', '=', mail.id),
])
tracking_email = self.env["mail.tracking.email"].search(
[("mail_id", "=", mail.id)]
)
return mail, tracking_email
def setUp(self):
super(TestMailgun, self).setUp()
self.recipient = 'to@example.com'
self.recipient = "to@example.com"
self.mail, self.tracking_email = self.mail_send()
self.api_key = 'key-12345678901234567890123456789012'
self.domain = 'example.com'
self.token = 'f1349299097a51b9a7d886fcb5c2735b426ba200ada6e9e149'
self.timestamp = '1471021089'
self.signature = ('4fb6d4dbbe10ce5d620265dcd7a3c0b8'
'ca0dede1433103891bc1ae4086e9d5b2')
self.env['ir.config_parameter'].set_param(
'mailgun.apikey', self.api_key)
self.env['ir.config_parameter'].set_param(
'mail.catchall.domain', self.domain)
self.env['ir.config_parameter'].set_param(
'mailgun.validation_key', self.api_key)
self.env['ir.config_parameter'].set_param(
'mailgun.auto_check_partner_email', '')
self.api_key = "key-12345678901234567890123456789012"
self.domain = "example.com"
self.token = "f1349299097a51b9a7d886fcb5c2735b426ba200ada6e9e149"
self.timestamp = "1471021089"
self.signature = (
"4fb6d4dbbe10ce5d620265dcd7a3c0b8ca0dede1433103891bc1ae4086e9d5b2"
)
self.env["ir.config_parameter"].set_param("mailgun.apikey", self.api_key)
self.env["ir.config_parameter"].set_param("mail.catchall.domain", self.domain)
self.env["ir.config_parameter"].set_param(
"mailgun.validation_key", self.api_key
)
self.env["ir.config_parameter"].set_param(
"mailgun.auto_check_partner_email", ""
)
self.event = {
'Message-Id': '<xxx.xxx.xxx-openerp-xxx-res.partner@test_db>',
'X-Mailgun-Sid': 'WyIwNjgxZSIsICJ0b0BleGFtcGxlLmNvbSIsICI3MG'
'I0MWYiXQ==',
'token': self.token,
'timestamp': self.timestamp,
'signature': self.signature,
'domain': 'example.com',
'message-headers': '[]',
'recipient': self.recipient,
'odoo_db': self.env.cr.dbname,
'tracking_email_id': '%s' % self.tracking_email.id
"Message-Id": "<xxx.xxx.xxx-openerp-xxx-res.partner@test_db>",
"X-Mailgun-Sid": "WyIwNjgxZSIsICJ0b0BleGFtcGxlLmNvbSIsICI3MGI0MWYiXQ==",
"token": self.token,
"timestamp": self.timestamp,
"signature": self.signature,
"domain": "example.com",
"message-headers": "[]",
"recipient": self.recipient,
"odoo_db": self.env.cr.dbname,
"tracking_email_id": "%s" % self.tracking_email.id,
}
self.metadata = {
'ip': '127.0.0.1',
'user_agent': False,
'os_family': False,
'ua_family': False,
"ip": "127.0.0.1",
"user_agent": False,
"os_family": False,
"ua_family": False,
}
self.partner = self.env['res.partner'].create({
'name': 'Mr. Odoo',
'email': 'mrodoo@example.com',
})
self.partner = self.env["res.partner"].create(
{"name": "Mr. Odoo", "email": "mrodoo@example.com"}
)
self.response = {
"items": [{
"log-level": "info",
"id": "oXAVv5URCF-dKv8c6Sa7T",
"timestamp": 1509119329.0,
"message": {
"headers": {
"to": "test@test.com",
"message-id": "test-id@f187c54734e8",
"from": "Mr. Odoo <mrodoo@odoo.com>",
"subject": "This is a test"
"items": [
{
"log-level": "info",
"id": "oXAVv5URCF-dKv8c6Sa7T",
"timestamp": 1509119329.0,
"message": {
"headers": {
"to": "test@test.com",
"message-id": "test-id@f187c54734e8",
"from": "Mr. Odoo <mrodoo@odoo.com>",
"subject": "This is a test",
}
},
},
"event": "delivered",
"recipient": "to@example.com",
}]
"event": "delivered",
"recipient": "to@example.com",
}
]
}
def event_search(self, event_type):
event = self.env['mail.tracking.event'].search([
('tracking_email_id', '=', self.tracking_email.id),
('event_type', '=', event_type),
])
event = self.env["mail.tracking.event"].search(
[
("tracking_email_id", "=", self.tracking_email.id),
("event_type", "=", event_type),
]
)
self.assertTrue(event)
return event
def test_no_api_key(self):
self.env['ir.config_parameter'].set_param('mailgun.apikey', '')
self.env["ir.config_parameter"].set_param("mailgun.apikey", "")
self.test_event_delivered()
with self.assertRaises(ValidationError):
self.env['mail.tracking.email']._mailgun_values()
self.env["mail.tracking.email"]._mailgun_values()
def test_no_domain(self):
self.env['ir.config_parameter'].set_param('mail.catchall.domain', '')
self.env["ir.config_parameter"].set_param("mail.catchall.domain", "")
self.test_event_delivered()
with self.assertRaises(ValidationError):
self.env['mail.tracking.email']._mailgun_values()
self.env["mail.tracking.email"]._mailgun_values()
# now we set an specific domain for Mailgun:
# i.e: we configure new EU zone without loosing old domain statistics
self.env['ir.config_parameter'].set_param(
'mailgun.domain', 'eu.example.com')
self.env["ir.config_parameter"].set_param("mailgun.domain", "eu.example.com")
self.test_event_delivered()
@mute_logger('odoo.addons.mail_tracking_mailgun.models'
'.mail_tracking_email')
@mute_logger("odoo.addons.mail_tracking_mailgun.models.mail_tracking_email")
def test_bad_signature(self):
self.event.update({
'event': 'delivered',
'signature': 'bad_signature',
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('ERROR: Signature', response)
self.event.update({"event": "delivered", "signature": "bad_signature"})
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("ERROR: Signature", response)
@mute_logger('odoo.addons.mail_tracking_mailgun.models'
'.mail_tracking_email')
@mute_logger("odoo.addons.mail_tracking_mailgun.models.mail_tracking_email")
def test_bad_event_type(self):
self.event.update({
'event': 'bad_event',
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('ERROR: Event type not supported', response)
self.event.update({"event": "bad_event"})
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("ERROR: Event type not supported", response)
@mute_logger('odoo.addons.mail_tracking_mailgun.models'
'.mail_tracking_email')
@mute_logger("odoo.addons.mail_tracking_mailgun.models.mail_tracking_email")
def test_bad_db(self):
self.event.update({
'event': 'delivered',
'odoo_db': 'bad_db',
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('ERROR: Invalid DB', response)
self.event.update({"event": "delivered", "odoo_db": "bad_db"})
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("ERROR: Invalid DB", response)
def test_bad_ts(self):
timestamp = '7a' # Now time will be used instead
signature = ('06cc05680f6e8110e59b41152b2d1c0f'
'1045d755ef2880ff922344325c89a6d4')
self.event.update({
'event': 'delivered',
'timestamp': timestamp,
'signature': signature,
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
timestamp = "7a" # Now time will be used instead
signature = "06cc05680f6e8110e59b41152b2d1c0f1045d755ef2880ff922344325c89a6d4"
self.event.update(
{"event": "delivered", "timestamp": timestamp, "signature": signature}
)
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
@mute_logger('odoo.addons.mail_tracking_mailgun.models'
'.mail_tracking_email')
@mute_logger("odoo.addons.mail_tracking_mailgun.models.mail_tracking_email")
def test_tracking_not_found(self):
self.event.update({
'event': 'delivered',
'tracking_email_id': 'bad_id',
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('ERROR: Tracking not found', response)
self.event.update({"event": "delivered", "tracking_email_id": "bad_id"})
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("ERROR: Tracking not found", response)
# https://documentation.mailgun.com/user_manual.html#tracking-deliveries
def test_event_delivered(self):
self.event.update({
'event': 'delivered',
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
events = self.event_search('delivered')
self.event.update({"event": "delivered"})
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
events = self.event_search("delivered")
for event in events:
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
# https://documentation.mailgun.com/user_manual.html#tracking-opens
def test_event_opened(self):
ip = '127.0.0.1'
user_agent = 'Odoo Test/8.0 Gecko Firefox/11.0'
os_family = 'Linux'
ua_family = 'Firefox'
ua_type = 'browser'
self.event.update({
'event': 'opened',
'city': 'Mountain View',
'country': 'US',
'region': 'CA',
'client-name': ua_family,
'client-os': os_family,
'client-type': ua_type,
'device-type': 'desktop',
'ip': ip,
'user-agent': user_agent,
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
event = self.event_search('open')
ip = "127.0.0.1"
user_agent = "Odoo Test/8.0 Gecko Firefox/11.0"
os_family = "Linux"
ua_family = "Firefox"
ua_type = "browser"
self.event.update(
{
"event": "opened",
"city": "Mountain View",
"country": "US",
"region": "CA",
"client-name": ua_family,
"client-os": os_family,
"client-type": ua_type,
"device-type": "desktop",
"ip": ip,
"user-agent": user_agent,
}
)
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
event = self.event_search("open")
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
self.assertEqual(event.ip, ip)
@ -209,33 +203,36 @@ class TestMailgun(TransactionCase):
self.assertEqual(event.ua_family, ua_family)
self.assertEqual(event.ua_type, ua_type)
self.assertEqual(event.mobile, False)
self.assertEqual(event.user_country_id.code, 'US')
self.assertEqual(event.user_country_id.code, "US")
# https://documentation.mailgun.com/user_manual.html#tracking-clicks
def test_event_clicked(self):
ip = '127.0.0.1'
user_agent = 'Odoo Test/8.0 Gecko Firefox/11.0'
os_family = 'Linux'
ua_family = 'Firefox'
ua_type = 'browser'
url = 'https://odoo-community.org'
self.event.update({
'event': 'clicked',
'city': 'Mountain View',
'country': 'US',
'region': 'CA',
'client-name': ua_family,
'client-os': os_family,
'client-type': ua_type,
'device-type': 'tablet',
'ip': ip,
'user-agent': user_agent,
'url': url,
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata, event_type='click')
self.assertEqual('OK', response)
event = self.event_search('click')
ip = "127.0.0.1"
user_agent = "Odoo Test/8.0 Gecko Firefox/11.0"
os_family = "Linux"
ua_family = "Firefox"
ua_type = "browser"
url = "https://odoo-community.org"
self.event.update(
{
"event": "clicked",
"city": "Mountain View",
"country": "US",
"region": "CA",
"client-name": ua_family,
"client-os": os_family,
"client-type": ua_type,
"device-type": "tablet",
"ip": ip,
"user-agent": user_agent,
"url": url,
}
)
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata, event_type="click"
)
self.assertEqual("OK", response)
event = self.event_search("click")
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
self.assertEqual(event.ip, ip)
@ -248,27 +245,30 @@ class TestMailgun(TransactionCase):
# https://documentation.mailgun.com/user_manual.html#tracking-unsubscribes
def test_event_unsubscribed(self):
ip = '127.0.0.1'
user_agent = 'Odoo Test/8.0 Gecko Firefox/11.0'
os_family = 'Linux'
ua_family = 'Firefox'
ua_type = 'browser'
self.event.update({
'event': 'unsubscribed',
'city': 'Mountain View',
'country': 'US',
'region': 'CA',
'client-name': ua_family,
'client-os': os_family,
'client-type': ua_type,
'device-type': 'mobile',
'ip': ip,
'user-agent': user_agent,
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
event = self.event_search('unsub')
ip = "127.0.0.1"
user_agent = "Odoo Test/8.0 Gecko Firefox/11.0"
os_family = "Linux"
ua_family = "Firefox"
ua_type = "browser"
self.event.update(
{
"event": "unsubscribed",
"city": "Mountain View",
"country": "US",
"region": "CA",
"client-name": ua_family,
"client-os": os_family,
"client-type": ua_type,
"device-type": "mobile",
"ip": ip,
"user-agent": user_agent,
}
)
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
event = self.event_search("unsub")
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
self.assertEqual(event.ip, ip)
@ -281,33 +281,37 @@ class TestMailgun(TransactionCase):
# https://documentation.mailgun.com/
# user_manual.html#tracking-spam-complaints
def test_event_complained(self):
self.event.update({
'event': 'complained',
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
event = self.event_search('spam')
self.event.update({"event": "complained"})
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
event = self.event_search("spam")
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
self.assertEqual(event.error_type, 'spam')
self.assertEqual(event.error_type, "spam")
# https://documentation.mailgun.com/user_manual.html#tracking-bounces
def test_event_bounced(self):
code = '550'
error = ("5.1.1 The email account does not exist.\n"
"5.1.1 double-checking the recipient's email address")
code = "550"
error = (
"5.1.1 The email account does not exist.\n"
"5.1.1 double-checking the recipient's email address"
)
notification = "Please, check recipient's email address"
self.event.update({
'event': 'bounced',
'code': code,
'error': error,
'notification': notification,
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
event = self.event_search('hard_bounce')
self.event.update(
{
"event": "bounced",
"code": code,
"error": error,
"notification": notification,
}
)
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
event = self.event_search("hard_bounce")
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
self.assertEqual(event.error_type, code)
@ -316,73 +320,77 @@ class TestMailgun(TransactionCase):
# https://documentation.mailgun.com/user_manual.html#tracking-failures
def test_event_dropped(self):
reason = 'hardfail'
code = '605'
description = 'Not delivering to previously bounced address'
self.event.update({
'event': 'dropped',
'reason': reason,
'code': code,
'description': description,
})
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
event = self.event_search('reject')
reason = "hardfail"
code = "605"
description = "Not delivering to previously bounced address"
self.event.update(
{
"event": "dropped",
"reason": reason,
"code": code,
"description": description,
}
)
response = self.env["mail.tracking.email"].event_process(
None, self.event, self.metadata
)
self.assertEqual("OK", response)
event = self.event_search("reject")
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
self.assertEqual(event.error_type, reason)
self.assertEqual(event.error_description, code)
self.assertEqual(event.error_details, description)
@mock.patch(_packagepath + '.models.res_partner.requests')
@mock.patch(_packagepath + ".models.res_partner.requests")
def test_email_validity(self, mock_request):
self.partner.email_bounced = False
mock_request.get.return_value.apparent_encoding = 'ascii'
mock_request.get.return_value.apparent_encoding = "ascii"
mock_request.get.return_value.status_code = 200
mock_request.get.return_value.json.return_value = {
'is_valid': True,
'mailbox_verification': 'true',
"is_valid": True,
"mailbox_verification": "true",
}
# Trigger email auto validation in partner
self.env['ir.config_parameter'].set_param(
'mailgun.auto_check_partner_email', 'True')
self.partner.email = 'info@tecnativa.com'
self.env["ir.config_parameter"].set_param(
"mailgun.auto_check_partner_email", "True"
)
self.partner.email = "info@tecnativa.com"
self.assertFalse(self.partner.email_bounced)
self.partner.email = 'xoxoxoxo@tecnativa.com'
self.partner.email = "xoxoxoxo@tecnativa.com"
# Not a valid mailbox
mock_request.get.return_value.json.return_value = {
'is_valid': True,
'mailbox_verification': 'false',
"is_valid": True,
"mailbox_verification": "false",
}
with self.assertRaises(UserError):
self.partner.check_email_validity()
# Not a valid mail address
mock_request.get.return_value.json.return_value = {
'is_valid': False,
'mailbox_verification': 'false',
"is_valid": False,
"mailbox_verification": "false",
}
with self.assertRaises(UserError):
self.partner.check_email_validity()
# Unable to fully validate
mock_request.get.return_value.json.return_value = {
'is_valid': True,
'mailbox_verification': 'unknown',
"is_valid": True,
"mailbox_verification": "unknown",
}
with self.assertRaises(UserError):
self.partner.check_email_validity()
self.assertTrue(self.partner.email_bounced)
@mock.patch(_packagepath + '.models.res_partner.requests')
@mock.patch(_packagepath + ".models.res_partner.requests")
def test_email_validity_exceptions(self, mock_request):
mock_request.get.return_value.status_code = 404
with self.assertRaises(UserError):
self.partner.check_email_validity()
self.env['ir.config_parameter'].set_param('mailgun.validation_key', '')
self.env["ir.config_parameter"].set_param("mailgun.validation_key", "")
with self.assertRaises(UserError):
self.partner.check_email_validity()
@mock.patch(_packagepath + '.models.res_partner.requests')
@mock.patch(_packagepath + ".models.res_partner.requests")
def test_bounced(self, mock_request):
self.partner.email_bounced = True
mock_request.get.return_value.status_code = 404
@ -398,22 +406,23 @@ class TestMailgun(TransactionCase):
def test_email_bounced_set(self):
message_number = len(self.partner.message_ids) + 1
self.partner._email_bounced_set('test_error', False)
self.partner._email_bounced_set("test_error", False)
self.assertEqual(len(self.partner.message_ids), message_number)
self.partner.email = ""
self.partner._email_bounced_set('test_error', False)
self.partner._email_bounced_set("test_error", False)
self.assertEqual(len(self.partner.message_ids), message_number)
@mock.patch(_packagepath + '.models.mail_tracking_email.requests')
@mock.patch(_packagepath + ".models.mail_tracking_email.requests")
def test_manual_check(self, mock_request):
mock_request.get.return_value.json.return_value = self.response
mock_request.get.return_value.status_code = 200
self.tracking_email.action_manual_check_mailgun()
event = self.env['mail.tracking.event'].search(
[('mailgun_id', '=', self.response['items'][0]['id'])])
self.assertEqual(event.event_type, self.response['items'][0]['event'])
event = self.env["mail.tracking.event"].search(
[("mailgun_id", "=", self.response["items"][0]["id"])]
)
self.assertEqual(event.event_type, self.response["items"][0]["event"])
@mock.patch(_packagepath + '.models.mail_tracking_email.requests')
@mock.patch(_packagepath + ".models.mail_tracking_email.requests")
def test_manual_check_exceptions(self, mock_request):
mock_request.get.return_value.status_code = 404
with self.assertRaises(ValidationError):