[MERGE] fetchmail local mta option by stw
bzr revid: al@openerp.com-20111004222640-ako0cjw414c5lz72
This commit is contained in:
commit
69b916b144
|
@ -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'})
|
||||
|
|
|
@ -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 & 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 & Confirm" type="object" name="button_confirm_login" states="draft" icon="gtk-apply"/>
|
||||
|
|
Loading…
Reference in New Issue