mail/models/ir_mail_server.py

61 lines
2.5 KiB
Python
Raw Normal View History

2024-05-03 12:40:35 +03:00
# -*- 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()