Files
Odoo-Build/images/odoo/bin/setup-mail
T
Janik von Rotz e8072520e8 feat(task): remove setup-mail command and move script to Odoo image
- Removed `setup-mail` command from taskfile
- Moved `setup-mail` script to Odoo image scripts directory
- Updated Dockerfile to copy `setup-mail` from new location
- Updated README to reflect new location of `setup-mail` script
- Modified `init-db` script to conditionally execute mail setup only when database is initialized
- Added proper shebang line to `setup-mail` script
2025-11-05 08:35:56 +01:00

126 lines
4.9 KiB
Python
Executable File

#!/usr/bin/env python3
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()