fix most mailcow issue
This commit is contained in:
parent
6405e7fdfc
commit
281eb2f13d
6 changed files with 30 additions and 25 deletions
|
|
@ -40,7 +40,6 @@
|
||||||
"bemade_mailcow_integration/static/src/xml/mailcow_templates.xml",
|
"bemade_mailcow_integration/static/src/xml/mailcow_templates.xml",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'demo': [],
|
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'application': False,
|
'application': False,
|
||||||
'auto_install': False
|
'auto_install': False
|
||||||
|
|
|
||||||
|
|
@ -16,15 +16,14 @@ class MailAlias(models.Model):
|
||||||
alias_domain = alias_domain[0]
|
alias_domain = alias_domain[0]
|
||||||
catchall_alias = catchall_alias[0]
|
catchall_alias = catchall_alias[0]
|
||||||
|
|
||||||
if not alias_domain:
|
if alias_domain:
|
||||||
raise ValidationError(_("No catchall domain is set in the system parameters. Please set one and try again."))
|
mailcow_alias = self.env['mail.mailcow.alias'].search([('address', '=', alias.alias_name + '@' + alias_domain)])
|
||||||
mailcow_alias = self.env['mail.mailcow.alias'].search([('address', '=', alias.alias_name + '@' + alias_domain)])
|
if mailcow_alias:
|
||||||
if mailcow_alias:
|
mailcow_alias.write({'active': True})
|
||||||
mailcow_alias.write({'active': True})
|
else:
|
||||||
else:
|
self.env['mail.mailcow.alias'].create({
|
||||||
self.env['mail.mailcow.alias'].create({
|
'address': alias.alias_name + '@' + alias_domain,
|
||||||
'address': alias.alias_name + '@' + alias_domain,
|
'goto': catchall_alias + '@' + alias_domain,
|
||||||
'goto': catchall_alias + '@' + alias_domain,
|
'alias_id': alias.id,
|
||||||
'alias_id': alias.id,
|
})
|
||||||
})
|
|
||||||
return alias
|
return alias
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,8 @@ class MailMailcow(models.AbstractModel):
|
||||||
def get_credentials(self):
|
def get_credentials(self):
|
||||||
params = self.env['ir.config_parameter'].sudo()
|
params = self.env['ir.config_parameter'].sudo()
|
||||||
|
|
||||||
base_url = params.get_param('mailcow.base_url')[0],
|
base_url = params.get_param('mailcow.base_url')
|
||||||
api_key = params.get_param('mailcow.api_key')[0],
|
api_key = params.get_param('mailcow.api_key')
|
||||||
|
|
||||||
if not base_url or not api_key:
|
if not base_url or not api_key:
|
||||||
_logger.error('No API key or base URL is set in the system parameters')
|
_logger.error('No API key or base URL is set in the system parameters')
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
from odoo import models, fields, api
|
from odoo import models, fields, api
|
||||||
import logging
|
import logging
|
||||||
|
import json
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -28,17 +29,14 @@ class MailcowBlacklist(models.Model):
|
||||||
'object_list': 'bl'
|
'object_list': 'bl'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.api_request(endpoint_add, 'POST', data)
|
self.api_request(endpoint_add, 'POST', data)
|
||||||
_logger.info(f'Added {vals["email"]} to Mailcow blacklist')
|
_logger.info(f'Added {vals["email"]} to Mailcow blacklist')
|
||||||
|
|
||||||
allblemail = self.api_request(endpoint_get_bl, 'GET', None)
|
bl_emails = self.api_request(endpoint_get_bl, 'GET', None)
|
||||||
|
|
||||||
mc_id = [d['prefid'] for d in allblemail if d['value'] == vals['email']]
|
mc_id = [d['prefid'] for d in bl_emails if d['value'] == vals['email']]
|
||||||
vals['mc_id'] = mc_id[0]
|
vals['mc_id'] = mc_id[0]
|
||||||
res = super().create(vals)
|
res = super().create(vals)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
|
|
@ -65,13 +63,10 @@ class MailcowBlacklist(models.Model):
|
||||||
"""
|
"""
|
||||||
Overridden unlink method to remove the blacklist entry from the Mailcow server.
|
Overridden unlink method to remove the blacklist entry from the Mailcow server.
|
||||||
"""
|
"""
|
||||||
|
endpoint = '/api/v1/delete/domain-policy'
|
||||||
for record in self:
|
for record in self:
|
||||||
endpoint = '/api/v1/delete/domain-policy'
|
data = json.dumps(record.mc_id)
|
||||||
data = {
|
self.api_request(endpoint, 'POST', data)
|
||||||
'items': [record.mc_id]
|
|
||||||
}
|
|
||||||
result = record.api_request(endpoint, 'POST', data)
|
|
||||||
print(result)
|
|
||||||
_logger.info(f'Removed {record.email} from Mailcow blacklist')
|
_logger.info(f'Removed {record.email} from Mailcow blacklist')
|
||||||
return super().unlink()
|
return super().unlink()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,3 +13,8 @@ class ResConfigSettings(models.TransientModel):
|
||||||
help="API key for the Mailcow server",
|
help="API key for the Mailcow server",
|
||||||
config_parameter='mailcow.api_key',
|
config_parameter='mailcow.api_key',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
mailcow_sync_alias = fields.Boolean(
|
||||||
|
string='Sync Aliases with Odoo',
|
||||||
|
help='Auto create Aliases in Mailcow from Odoo',
|
||||||
|
config_parameter='mailcow.sync_alias')
|
||||||
|
|
@ -24,6 +24,13 @@
|
||||||
<div class="content-group">
|
<div class="content-group">
|
||||||
<field name="mailcow_api_key"/>
|
<field name="mailcow_api_key"/>
|
||||||
</div>
|
</div>
|
||||||
|
<label for="mailcow_sync_alias" string="Sync Aliases with Odoo'"/>
|
||||||
|
<div class="text-muted">
|
||||||
|
Auto create Aliases in Mailcow from Odoo
|
||||||
|
</div>
|
||||||
|
<div class="content-group">
|
||||||
|
<field name="mailcow_sync_alias"/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue