You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.7 KiB

  1. # Copyright 2017 LasLabs Inc.
  2. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
  3. from odoo import api, fields, models
  4. class IrMailServer(models.Model):
  5. _inherit = 'ir.mail_server'
  6. smtp_from = fields.Char(
  7. string='Email From',
  8. help='Set this in order to email from a specific address.'
  9. )
  10. @api.model
  11. def send_email(self, message, mail_server_id=None, smtp_server=None,
  12. *args, **kwargs):
  13. # Replicate logic from core to get mail server
  14. mail_server = None
  15. if mail_server_id:
  16. mail_server = self.sudo().browse(mail_server_id)
  17. elif not smtp_server:
  18. mail_server = self.sudo().search([], order='sequence', limit=1)
  19. if mail_server and mail_server.smtp_from:
  20. split_from = message['From'].rsplit(' <', 1)
  21. if len(split_from) > 1:
  22. email_from = '%s <%s>' % (
  23. split_from[0], mail_server.smtp_from,
  24. )
  25. else:
  26. email_from = mail_server.smtp_from
  27. message.replace_header('From', email_from)
  28. bounce_alias = self.env['ir.config_parameter'].get_param(
  29. "mail.bounce.alias")
  30. if not bounce_alias:
  31. # then, bounce handling is disabled and we want
  32. # Return-Path = From
  33. if 'Return-Path' in message:
  34. message.replace_header('Return-Path', email_from)
  35. else:
  36. message.add_header('Return-Path', email_from)
  37. return super(IrMailServer, self).send_email(
  38. message, mail_server_id, smtp_server, *args, **kwargs
  39. )