From 25acb955801c32dbc5b68d5d608bca2923367475 Mon Sep 17 00:00:00 2001 From: "Guewen Baconnier @ Camptocamp" Date: Tue, 22 Nov 2011 10:45:49 +0100 Subject: [PATCH] [IMP] mail_environment: add support for multi mail servers (lp:c2c-addons/6.1 rev 16) --- mail_environment/__openerp__.py | 30 +++++++++++- mail_environment/env_mail.py | 84 +++++++++++++++++++++------------ 2 files changed, 84 insertions(+), 30 deletions(-) diff --git a/mail_environment/__openerp__.py b/mail_environment/__openerp__.py index 3c74e2091..49544f577 100644 --- a/mail_environment/__openerp__.py +++ b/mail_environment/__openerp__.py @@ -8,7 +8,35 @@ 'version': '0.1', 'category': 'Tools', 'description': """ - extend mail and fetch mail with server env +Extend mail and fetch mail with server environment module. + +In config files, sections outgoint_mail and incoming_mails are default values for all Outgoing Mail Servers and Fetchmail Servers. +For each server, you can (re)define values with a section named "outgoing_mail.resource_name" where resource_name is the name of your server. + +Exemple of config file : + +[outgoing_mail] +smtp_host = smtp.myserver.com +smtp_port = 587 +smtp_user = +smtp_pass = +smtp_encryption = ssl + +[outgoing_mail.openerp_smtp_server1] +smtp_user = openerp +smtp_pass = openerp + +[incoming_mail.openerp_pop_mail1] +server = mail.myserver.com +port = 110 +type = pop +is_ssl = 0 +attach = 0 +original = 0 +user = openerp@myserver.com +password = openerp + + """, 'author': 'Camptocamp', 'website': 'http://openerp.camptocamp.com', diff --git a/mail_environment/env_mail.py b/mail_environment/env_mail.py index a1f9b4268..a42e0fc6c 100644 --- a/mail_environment/env_mail.py +++ b/mail_environment/env_mail.py @@ -9,7 +9,7 @@ from osv import osv from server_environment import serv_config -class IRMAIL(osv.osv): +class IrMail(osv.osv): _inherit = "ir.mail_server" def _get_smtp_conf(self, cursor, uid, ids, name, args, context=None): @@ -17,10 +17,22 @@ class IRMAIL(osv.osv): Return configuration """ res = {} - for conf in self.browse(cursor, uid, ids): - res_dict = dict(serv_config.items('outgoing_mail')) - res_dict['smtp_port'] = int(res_dict.get('smtp_port', 587)) - res[conf.id] = res_dict + for mail_server in self.browse(cursor, uid, ids): + global_section_name = 'outgoing_mail' + + # default vals + config_vals = {'smtp_port': 587} + if serv_config.has_section(global_section_name): + config_vals.update((serv_config.items(global_section_name))) + + custom_section_name = '.'.join((global_section_name, mail_server.name)) + if serv_config.has_section(custom_section_name): + config_vals.update(serv_config.items(custom_section_name)) + + if config_vals.get('smtp_port'): + config_vals['smtp_port'] = int(config_vals['smtp_port']) + + res[mail_server.id] = config_vals return res _columns = { @@ -28,41 +40,41 @@ class IRMAIL(osv.osv): method=True, string='SMTP Server', type="char", - multi='smtp_host', + multi='outgoing_mail_config', size=128), 'smtp_port': fields.function(_get_smtp_conf, method=True, string='SMTP Port', type="integer", - multi='smtp_port', + multi='outgoing_mail_config', help="SMTP Port. Usually 465 for SSL, and 25 or 587 for other cases.", size=5), 'smtp_user': fields.function(_get_smtp_conf, method=True, string='Username', type="char", - multi='smtp_user', + multi='outgoing_mail_config', help="Optional username for SMTP authentication", size=64), 'smtp_pass': fields.function(_get_smtp_conf, method=True, string='Password', type="char", - multi='smtp_pass', + multi='outgoing_mail_config', help="Optional password for SMTP authentication", size=64), 'smtp_encryption' :fields.function(_get_smtp_conf, method=True, string='smtp_encryption', type="char", - multi='smtp_encryption', + multi='outgoing_mail_config', help="Choose the connection encryption scheme:\n" "- none: SMTP sessions are done in cleartext.\n" "- starttls: TLS encryption is requested at start of SMTP session (Recommended)\n" "- ssl: SMTP sessions are encrypted with SSL/TLS through a dedicated port (default: 465)", size=64)} -IRMAIL() +IrMail() class FetchmailServer(osv.osv): @@ -74,14 +86,30 @@ class FetchmailServer(osv.osv): Return configuration """ res = {} - - for conf in self.browse(cursor, uid, ids): - res_dict = dict(serv_config.items('incoming_mail')) - res_dict['port'] = int(res_dict.get('port', 993)) - res_dict['is_ssl'] = bool(int(res_dict.get('is_ssl', 0))) - res_dict['attach'] = bool(int(res_dict.get('attach', 0))) - res_dict['original'] = bool(int(res_dict.get('original', 0))) - res[conf.id] = res_dict + for fetchmail in self.browse(cursor, uid, ids): + global_section_name = 'incoming_mail' + + key_types = {'port': int, + 'is_ssl': bool, + 'attach': bool, + 'original': bool,} + + # default vals + config_vals = {'port': 993, + 'is_ssl': 0, + 'attach': 0, + 'original': 0} + if serv_config.has_section(global_section_name): + config_vals.update(serv_config.items(global_section_name)) + + custom_section_name = '.'.join((global_section_name, fetchmail.name)) + if serv_config.has_section(custom_section_name): + config_vals.update(serv_config.items(custom_section_name)) + + for key, to_type in key_types.iteritems(): + if config_vals.get(key): + config_vals[key] = to_type(config_vals[key]) + res[fetchmail.id] = config_vals return res _columns = { @@ -89,54 +117,52 @@ class FetchmailServer(osv.osv): method=True, string='Server', type="char", - multi='server', + multi='income_mail_config', size=256, help="Hostname or IP of the mail server"), 'port': fields.function(_get_incom_conf, method=True, string='Port', type="integer", - multi='port', + multi='income_mail_config', help="Hostname or IP of the mail server"), 'type': fields.function(_get_incom_conf, method=True, string='Type', type="char", - multi='type', + multi='income_mail_config', size=64, help="pop, imap, local"), 'is_ssl': fields.function(_get_incom_conf, method=True, string='Is SSL', type="boolean", - multi='is_ssl', + multi='income_mail_config', help='Connections are encrypted with SSL/TLS through' ' a dedicated port (default: IMAPS=993, POP3S=995)'), 'attach': fields.function(_get_incom_conf, method=True, string='Keep Attachments', type="boolean", - multi='attach', + multi='income_mail_config', help="Whether attachments should be downloaded. " "If not enabled, incoming emails will be stripped of any attachments before being processed"), 'original': fields.function(_get_incom_conf, method=True, string='Keep Original', type="boolean", - multi='attach', + multi='income_mail_config', help="Whether a full original copy of each email should be kept for reference" "and attached to each processed message. This will usually double the size of your message database."), 'user': fields.function(_get_incom_conf, method=True, string='Username', type="char", - multi='user', + multi='income_mail_config', size=64), 'password': fields.function(_get_incom_conf, method=True, string='password', type="char", - multi='password', + multi='income_mail_config', size=64)} FetchmailServer() - - \ No newline at end of file