From 73cb79cd050007420edf7b0d319ebeab57a930da Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Tue, 22 Nov 2011 10:45:49 +0100
Subject: [PATCH] [IMP] mail_environment misc
---
mail_environment/__init__.py | 7 +--
mail_environment/__openerp__.py | 51 +++++++++++++++-
mail_environment/env_mail.py | 104 ++++++++++++++++++++++----------
3 files changed, 122 insertions(+), 40 deletions(-)
diff --git a/mail_environment/__init__.py b/mail_environment/__init__.py
index beab69d..be0b4da 100644
--- a/mail_environment/__init__.py
+++ b/mail_environment/__init__.py
@@ -1,6 +1 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-# Author Nicolas Bessi. Copyright Camptocamp SA
-##############################################################################
-from . import env_mail
\ No newline at end of file
+from . import env_mail
diff --git a/mail_environment/__openerp__.py b/mail_environment/__openerp__.py
index 3c74e20..fce396f 100644
--- a/mail_environment/__openerp__.py
+++ b/mail_environment/__openerp__.py
@@ -1,16 +1,61 @@
-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
##############################################################################
#
-# Author Nicolas Bessi. Copyright Camptocamp SA
+# Author: Nicolas Bessi
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
##############################################################################
+
{
'name': 'Server env config for mail + fetchmail',
'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',
+ 'license': 'AGPL-3',
'website': 'http://openerp.camptocamp.com',
'depends': ['mail', 'fetchmail', 'server_environment', 'server_environment_files', 'crm'],
'init_xml': [],
diff --git a/mail_environment/env_mail.py b/mail_environment/env_mail.py
index a1f9b42..59d5f5f 100644
--- a/mail_environment/env_mail.py
+++ b/mail_environment/env_mail.py
@@ -1,15 +1,31 @@
-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
##############################################################################
#
-# Author Nicolas Bessi. Copyright Camptocamp SA
+# Author: Nicolas Bessi
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
##############################################################################
+
from osv import fields
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 +33,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 +56,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 +102,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': lambda a: bool(int(a)),
+ 'attach': lambda a: bool(int(a)),
+ 'original': lambda a: bool(int(a)),}
+
+ # 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 +133,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