61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import _, api, fields, models
|
||
|
|
||
|
|
||
|
class IrMailServer(models.Model):
|
||
|
_name = 'ir.mail_server'
|
||
|
_inherit = ['ir.mail_server']
|
||
|
|
||
|
mail_template_ids = fields.One2many(
|
||
|
comodel_name='mail.template',
|
||
|
inverse_name='mail_server_id',
|
||
|
string='Mail template using this mail server',
|
||
|
readonly=True)
|
||
|
|
||
|
def _active_usages_compute(self):
|
||
|
usages_super = super()._active_usages_compute()
|
||
|
for record in self.filtered('mail_template_ids'):
|
||
|
usages_super.setdefault(record.id, []).extend(
|
||
|
map(lambda t: _('%s (Email Template)', t.display_name), record.mail_template_ids)
|
||
|
)
|
||
|
return usages_super
|
||
|
|
||
|
@api.model
|
||
|
def _get_default_bounce_address(self):
|
||
|
""" Compute the default bounce address. Try to use mail-defined config
|
||
|
parameter bounce alias if set. """
|
||
|
if self.env.company.bounce_email:
|
||
|
return self.env.company.bounce_email
|
||
|
return super()._get_default_bounce_address()
|
||
|
|
||
|
@api.model
|
||
|
def _get_default_from_address(self):
|
||
|
""" Default from: try to use default_from defined on company's alias
|
||
|
domain. """
|
||
|
if default_from := self.env.company.default_from_email:
|
||
|
return default_from
|
||
|
return super()._get_default_from_address()
|
||
|
|
||
|
def _get_test_email_from(self):
|
||
|
self.ensure_one()
|
||
|
if from_filter_parts := [part.strip() for part in (self.from_filter or '').split(",") if part.strip()]:
|
||
|
# find first found complete email in filter parts
|
||
|
if mail_from := next((email for email in from_filter_parts if "@" in email), None):
|
||
|
return mail_from
|
||
|
# the mail server is configured for a domain that matches the default email address
|
||
|
alias_domains = self.env['mail.alias.domain'].sudo().search([])
|
||
|
matching = next(
|
||
|
(alias_domain for alias_domain in alias_domains
|
||
|
if self._match_from_filter(alias_domain.default_from_email, self.from_filter)
|
||
|
), False
|
||
|
)
|
||
|
if matching:
|
||
|
return matching.default_from_email
|
||
|
# fake default_from "odoo@domain"
|
||
|
return f"odoo@{from_filter_parts[0]}"
|
||
|
# no from_filter or from_filter is configured for a domain different that
|
||
|
# the default_from of company's alias_domain -> fallback
|
||
|
return super()._get_test_email_from()
|