[MERGE] fetchmail local mta option by stw

bzr revid: al@openerp.com-20111004222640-ako0cjw414c5lz72
This commit is contained in:
Antony Lesuisse 2011-10-05 00:26:40 +02:00
commit 69b916b144
5 changed files with 52 additions and 31 deletions

View File

@ -25,6 +25,14 @@ from imaplib import IMAP4
from imaplib import IMAP4_SSL
from poplib import POP3
from poplib import POP3_SSL
try:
import cStringIO as StringIO
except ImportError:
import StringIO
import zipfile
import base64
import addons
import netsvc
from osv import osv, fields
@ -46,11 +54,12 @@ class fetchmail_server(osv.osv):
('draft', 'Not Confirmed'),
('done', 'Confirmed'),
], 'State', select=True, readonly=True),
'server' : fields.char('Server Name', size=256, required=True, readonly=True, help="Hostname or IP of the mail server", states={'draft':[('readonly', False)]}),
'port' : fields.integer('Port', required=True, readonly=True, states={'draft':[('readonly', False)]}),
'server' : fields.char('Server Name', size=256, readonly=True, help="Hostname or IP of the mail server", states={'draft':[('readonly', False)]}),
'port' : fields.integer('Port', readonly=True, states={'draft':[('readonly', False)]}),
'type':fields.selection([
('pop', 'POP Server'),
('imap', 'IMAP Server'),
('local', 'Local Server'),
], 'Server Type', select=True, required=True, readonly=False),
'is_ssl':fields.boolean('SSL/TLS', help="Connections are encrypted with SSL/TLS through a dedicated port (default: IMAPS=993, POP3S=995)"),
'attach':fields.boolean('Keep Attachments', help="Whether attachments should be downloaded. "
@ -58,8 +67,8 @@ class fetchmail_server(osv.osv):
'original':fields.boolean('Keep Original', 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."),
'date': fields.datetime('Last Fetch Date', readonly=True),
'user' : fields.char('Username', size=256, required=True, readonly=True, states={'draft':[('readonly', False)]}),
'password' : fields.char('Password', size=1024, required=True, readonly=True, states={'draft':[('readonly', False)]}),
'user' : fields.char('Username', size=256, readonly=True, states={'draft':[('readonly', False)]}),
'password' : fields.char('Password', size=1024, readonly=True, states={'draft':[('readonly', False)]}),
'action_id':fields.many2one('ir.actions.server', 'Server Action', help="Optional custom server action to trigger for each incoming mail, "
"on the record that was created or updated by this mail"),
'object_id': fields.many2one('ir.model', "Create a New Record", required=True, help="Process each incoming mail as part of a conversation "
@ -69,6 +78,8 @@ class fetchmail_server(osv.osv):
'priority': fields.integer('Server Priority', readonly=True, states={'draft':[('readonly', False)]}, help="Defines the order of processing, "
"lower values mean higher priority"),
'message_ids': fields.one2many('mail.message', 'fetchmail_server_id', 'Messages', readonly=True),
'configuration' : fields.text('Configuration'),
'script' : fields.char('Script', readonly=True, size=64),
}
_defaults = {
'state': "draft",
@ -76,31 +87,36 @@ class fetchmail_server(osv.osv):
'active': True,
'priority': 5,
'attach': True,
'script': '/mail/static/scripts/openerp_mailgate.py',
}
def default_get(self, cr, uid, fields, context=None):
if context is None:
context = {}
result = super(fetchmail_server, self).default_get(cr, uid, fields, context=context)
model = context.pop('fetchmail_model', False) or False
if isinstance(model, basestring):
model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', model)], context=context)
result.update(
object_id = model_id[0],
)
return result
def onchange_server_type(self, cr, uid, ids, server_type=False, ssl=False):
def onchange_server_type(self, cr, uid, ids, server_type=False, ssl=False, object_id=False):
port = 0
values = {}
if server_type == 'pop':
port = ssl and 995 or 110
elif server_type == 'imap':
port = ssl and 993 or 143
return {'value':{'port':port}}
else:
values['server'] = ''
values['port'] = port
conf = {
'dbname' : cr.dbname,
'uid' : uid,
'model' : 'MODELNAME',
}
if object_id:
m = self.pool.get('ir.model')
r = m.read(cr,uid,[object_id],['model'])
conf['model']=r[0]['model']
values['configuration'] = """Use the below script with the following command line options with your Mail Transport Agent (MTA)
openerp_mailgate.py -u %(uid)d -p PASSWORD -o %(model)s -d %(dbname)s --host=HOSTNAME --port=PORT
""" % conf
return {'value':values}
def set_draft(self, cr, uid, ids, context=None):
self.write(cr, uid, ids , {'state':'draft'})

View File

@ -25,29 +25,34 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Incoming Mail Server">
<group col="6" colspan="4">
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="type" select="1" on_change="onchange_server_type(type, is_ssl)"/>
<field name="type" select="1" on_change="onchange_server_type(type, is_ssl, object_id)"/>
<field name="date" select="1"/>
</group>
<notebook colspan="4">
<page string="Server &amp; Login">
<group col="4" colspan="2">
<group col="4" colspan="2" attrs="{'invisible' : [('type', '=', 'local')]}">
<separator string="Server Information" colspan="2"/>
<field name="server" colspan="4"/>
<field name="port" />
<field name="server" colspan="4" attrs="{'required' : [('type', '!=', 'local')]}" />
<field name="port" required="1" attrs="{'required' : [('type', '!=', 'local')]}" />
<field name="is_ssl" select="1" on_change="onchange_server_type(type, is_ssl)"/>
</group>
<group col="2" colspan="2">
<group col="2" colspan="2" attrs="{'invisible' : [('type', '=', 'local')]}">
<separator string="Login Information" colspan="2"/>
<field name="user" />
<field name="password" password="True" />
<field name="user" attrs="{'required' : [('type', '!=', 'local')]}"/>
<field name="password" password="True" attrs="{'required' : [('type', '!=', 'local')]}"/>
</group>
<group col="2" colspan="2">
<separator string="Actions to Perform on Incoming Mails" colspan="2"/>
<field name="object_id"/>
<field name="object_id" on_change="onchange_server_type(type, is_ssl, object_id)"/>
<field name="action_id" groups="base.group_extended"/>
</group>
<group attrs="{'invisible' : [('type', '!=', 'local')]}" colspan="4" col="4">
<separator string="Configuration" colspan="4"/>
<field name="configuration" colspan="4"/>
<field name="script" colspan="4" widget="url"/>
</group>
</page>
<page string="Advanced" groups="base.group_extended">
<group colspan="2" col="2">
@ -59,7 +64,7 @@
</group>
</page>
</notebook>
<group col="6" colspan="4">
<group colspan="4" col="6" attrs="{'invisible' : [('type', '=', 'local')]}">
<field name="state"/>
<button string="Reset Confirmation" type="object" name="set_draft" icon="gtk-convert" states="done"/>
<button string="Test &amp; Confirm" type="object" name="button_confirm_login" states="draft" icon="gtk-apply"/>