[FIX] mail_tracking_mailgun: alternative domain

- In case the sending domain is different from the one configured in the
mail.domain.catchall setting.
This commit is contained in:
David 2018-08-02 10:53:59 +02:00 committed by nicolas
parent bf4687c4bb
commit 85beba204f
6 changed files with 28 additions and 17 deletions

View File

@ -36,6 +36,8 @@ parameters:
domain.
- `mailgun.api_url`: It should be fine as it is, but it could change in the
future.
- `mailgun.domain`: In case your sending domain is different from the one
configured in `mail.catchall.domain`.
- `mailgun.validation_key`: If you want to be able to check mail address
validity you must config this parameter with your account Public Validation
Key.

View File

@ -6,7 +6,7 @@
{
"name": "Mail tracking for Mailgun",
"summary": "Mail tracking and Mailgun webhooks integration",
"version": "11.0.1.0.3",
"version": "11.0.1.1.2",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "Tecnativa, "

View File

@ -14,25 +14,25 @@ msgstr ""
"Plural-Forms: \n"
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/res_partner.py:88
#: code:addons/mail_tracking_mailgun/models/res_partner.py:89
#, python-format
msgid "%s couldn't be verified. Either the request couln't be completed or the mailbox provider doesn't support email verification"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/res_partner.py:78
#: code:addons/mail_tracking_mailgun/models/res_partner.py:79
#, python-format
msgid "%s failed the mailbox verification. Please check it in order to avoid sending issues"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/res_partner.py:69
#: code:addons/mail_tracking_mailgun/models/res_partner.py:70
#, python-format
msgid "%s is not a valid email address. Please check it in order to avoid sending issues"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:75
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:76
#, 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:238
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:240
#, python-format
msgid "Couldn't retrieve Mailgun information"
msgstr ""
@ -67,13 +67,13 @@ msgid "Email has been bounced: %s\n"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/res_partner.py:56
#: code:addons/mail_tracking_mailgun/models/res_partner.py:57
#, python-format
msgid "Error %s trying to check mailof connection"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:242
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:244
#, python-format
msgid "Event information not longer stored"
msgstr ""
@ -94,7 +94,7 @@ msgid "Mailgun"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/res_partner.py:63
#: code:addons/mail_tracking_mailgun/models/res_partner.py:64
#, python-format
msgid "Mailgun Error. Mailbox verification value wasn't returned"
msgstr ""
@ -121,7 +121,7 @@ msgid "There is no Mailgun API key!"
msgstr ""
#. module: mail_tracking_mailgun
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:225
#: code:addons/mail_tracking_mailgun/models/mail_tracking_email.py:227
#, python-format
msgid "There is no tracked message!"
msgstr ""

View File

@ -64,13 +64,14 @@ class MailTrackingEmail(models.Model):
digestmod=hashlib.sha256).hexdigest()
def _mailgun_values(self):
icp = self.env['ir.config_parameter']
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')
domain = icp.get_param('mail.catchall.domain')
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')
@ -78,7 +79,8 @@ class MailTrackingEmail(models.Model):
def _mailgun_signature_verify(self, event):
event = event or {}
api_key = self.env['ir.config_parameter'].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 "

View File

@ -46,7 +46,8 @@ class ResPartner(models.Model):
' in order to be able to check mails validity'))
for partner in self.filtered('email'):
res = requests.get(
"%s/address/validate" % api_url,
# 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,

View File

@ -104,6 +104,11 @@ class TestMailgun(TransactionCase):
self.test_event_delivered()
with self.assertRaises(ValidationError):
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.test_event_delivered()
@mute_logger('odoo.addons.mail_tracking_mailgun.models'
'.mail_tracking_email')
@ -169,9 +174,10 @@ class TestMailgun(TransactionCase):
response = self.env['mail.tracking.email'].event_process(
None, self.event, self.metadata)
self.assertEqual('OK', response)
event = self.event_search('delivered')
self.assertEqual(event.timestamp, float(self.timestamp))
self.assertEqual(event.recipient, self.recipient)
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):