import os # Get environment variables smtp_host = os.environ.get('ODOO_MAIL_SMTP_HOST', '') smtp_port = int(os.environ.get('ODOO_MAIL_SMTP_PORT', 587)) smtp_encryption = os.environ.get('ODOO_MAIL_SMTP_ENCRYPTION', 'starttls') smtp_from_filter = os.environ.get('ODOO_MAIL_SMTP_FROM_FILTER', '') imap_host = os.environ.get('ODOO_MAIL_IMAP_HOST', '') imap_port = int(os.environ.get('ODOO_MAIL_IMAP_PORT', 993)) imap_ssl = os.environ.get('ODOO_MAIL_IMAP_SSL', 'True') == 'True' mail_user = os.environ.get('ODOO_MAIL_USER', '') mail_password = os.environ.get('ODOO_MAIL_PASSWORD', '') mail_bounce_alias = os.environ.get('MAIL_BOUNCE_ALIAS', '') mail_catchall_alias = os.environ.get('MAIL_CATCHALL_ALIAS', '') mail_catchall_domain = os.environ.get('MAIL_CATCHALL_DOMAIN', '') mail_default_from = os.environ.get('MAIL_DEFAULT_FROM', '') mail_alias_domain = os.environ.get('MAIL_ALIAS_DOMAIN', '') # Setup outgoing mail server if smtp_host: print("Setup outgoing mail server.") ir_mail_server = { 'name': smtp_host, 'smtp_host': smtp_host, 'smtp_port': smtp_port, 'smtp_user': mail_user, 'smtp_pass': mail_password, 'smtp_encryption': smtp_encryption, 'from_filter': smtp_from_filter } ir_mail_server_id = env['ir.mail_server'].search([('name', '=', smtp_host)], limit=1) if ir_mail_server_id: ir_mail_server_id.write(ir_mail_server) else: env['ir.mail_server'].create(ir_mail_server) env.cr.commit() # Setup incoming mail server if imap_host: print("Setup incoming mail server.") fetchmail_server = { 'name': imap_host, 'server': imap_host, 'port': imap_port, 'user': mail_user, 'password': mail_password, 'is_ssl': imap_ssl, 'state': 'done' } fetchmail_server_id = env['fetchmail.server'].search([('name', '=', imap_host)], limit=1) if fetchmail_server_id: fetchmail_server_id.write(fetchmail_server) else: env['fetchmail.server'].create(fetchmail_server) env.cr.commit() # Setup system parameters if mail_bounce_alias: print(f"Set mail bounce alias: {mail_bounce_alias}") mail_bounce_alias_id = env['ir.config_parameter'].search([('key', '=', 'mail.bounce.alias')], limit=1) if not mail_bounce_alias_id: env['ir.config_parameter'].create({'key': 'mail.bounce.alias', 'value': mail_bounce_alias}) elif mail_bounce_alias_id.value != mail_bounce_alias: mail_bounce_alias_id.write({'value': mail_bounce_alias}) env.cr.commit() if mail_catchall_alias: print(f"Set mail catchall alias: {mail_catchall_alias}") mail_catchall_alias_id = env['ir.config_parameter'].search([('key', '=', 'mail.catchall.alias')], limit=1) if not mail_catchall_alias_id: env['ir.config_parameter'].create({'key': 'mail.catchall.alias', 'value': mail_catchall_alias}) elif mail_catchall_alias_id.value != mail_catchall_alias: mail_catchall_alias_id.write({'value': mail_catchall_alias}) env.cr.commit() if mail_catchall_domain: print(f"Set mail catchall domain: {mail_catchall_domain}") mail_catchall_domain_id = env['ir.config_parameter'].search([('key', '=', 'mail.catchall.domain')], limit=1) if not mail_catchall_domain_id: env['ir.config_parameter'].create({'key': 'mail.catchall.domain', 'value': mail_catchall_domain}) elif mail_catchall_domain_id.value != mail_catchall_domain: mail_catchall_domain_id.write({'value': mail_catchall_domain}) env.cr.commit() if mail_default_from: print(f"Set mail default from: {mail_default_from}") mail_default_from_id = env['ir.config_parameter'].search([('key', '=', 'mail.default.from')], limit=1) if not mail_default_from_id: env['ir.config_parameter'].create({'key': 'mail.default.from', 'value': mail_default_from}) elif mail_default_from_id.value != mail_default_from: mail_default_from_id.write({'value': mail_default_from}) env.cr.commit() # Setup mail alias domain if mail_alias_domain: try: env['mail.alias.domain'] has_alias_domain_model = True except KeyError: has_alias_domain_model = False if has_alias_domain_model: company = env.user.company_id values = { 'name': mail_alias_domain, } if mail_bounce_alias: values['bounce_alias'] = mail_bounce_alias if mail_catchall_alias: values['catchall_alias'] = mail_catchall_alias if mail_default_from: values['default_from'] = mail_default_from domain_id = env['mail.alias.domain'].search([ ('name', '=', mail_alias_domain), ], limit=1) if domain_id: print(f"Update existing mail alias domain: {mail_alias_domain}") domain_id.write(values) else: print(f"Create new mail alias domain: {mail_alias_domain}") env['mail.alias.domain'].create(values) env.cr.commit()