summaryrefslogtreecommitdiff
path: root/addons/fetchmail
diff options
context:
space:
mode:
Diffstat (limited to 'addons/fetchmail')
-rw-r--r--addons/fetchmail/__openerp__.py39
-rw-r--r--addons/fetchmail/fetchmail.py260
-rw-r--r--addons/fetchmail/fetchmail_data.xml8
-rw-r--r--addons/fetchmail/fetchmail_installer_view.xml4
-rw-r--r--addons/fetchmail/fetchmail_view.xml142
-rw-r--r--addons/fetchmail/security/ir.model.access.csv3
6 files changed, 222 insertions, 234 deletions
diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py
index d2694fdb958..986c3bc12a1 100644
--- a/addons/fetchmail/__openerp__.py
+++ b/addons/fetchmail/__openerp__.py
@@ -21,19 +21,42 @@
##############################################################################
{
- "name" : "Fetchmail Server",
+ "name" : "Automated Email Retriever",
"version" : "1.0",
- "depends" : ["base", 'mail_gateway'],
+ "depends" : ["base", 'mail'],
"author" : "OpenERP SA",
"category": 'Tools',
"description": """
-Fetch email from POP / IMAP servers.
-====================================
+Retrieve incoming email on POP / IMAP servers
+=============================================
- * Supports SSL
- * Integrated with all modules
- * Automatically receive email
- * Email-based record operations (Add, Update)
+Enter the parameters of your POP/IMAP account(s), and any incoming
+emails on these accounts will be automatically downloaded into your OpenERP
+system. All POP3/IMAP-compatible servers are supported, included those
+that require an encrypted SSL/TLS connection.
+
+This can be used to easily create email-based workflows for many
+email-enabled OpenERP documents, such as:
+
+ * CRM Leads/Opportunities
+ * CRM Claims
+ * Project Issues
+ * Project Tasks
+ * Human Resource Recruitments (Applicants)
+ * etc.
+
+Just install the relevant application, and you can assign any of
+these document types (Leads, Project Issues, etc.) to your incoming
+email accounts. New emails will automatically spawn new documents
+of the chosen type, so it's a snap to create a mailbox-to-OpenERP
+integration. Even better: these documents directly act as mini
+conversations synchronized by email. You can reply from within
+OpenERP, and the answers will automatically be collected when
+they come back, and attached to the same *conversation* document.
+
+For more specific needs, you may also assign custom-defined actions
+(technically: Server Actions) to be triggered for each incoming
+mail.
""",
'website': 'http://www.openerp.com',
'init_xml': [],
diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py
index 9817f0d6633..8aaff197d47 100644
--- a/addons/fetchmail/fetchmail.py
+++ b/addons/fetchmail/fetchmail.py
@@ -19,8 +19,8 @@
#
##############################################################################
+import logging
import time
-
from imaplib import IMAP4
from imaplib import IMAP4_SSL
from poplib import POP3
@@ -29,222 +29,200 @@ from poplib import POP3_SSL
import netsvc
from osv import osv, fields
import tools
+from tools.translate import _
-logger = netsvc.Logger()
-
+logger = logging.getLogger('fetchmail')
-class email_server(osv.osv):
-
- _name = 'email.server'
+class fetchmail_server(osv.osv):
+ """Incoming POP/IMAP mail server account"""
+ _name = 'fetchmail.server'
_description = "POP/IMAP Server"
+ _order = 'priority'
_columns = {
'name':fields.char('Name', size=256, required=True, readonly=False),
'active':fields.boolean('Active', required=False),
'state':fields.selection([
('draft', 'Not Confirmed'),
- ('waiting', 'Waiting for Verification'),
('done', 'Confirmed'),
], 'State', select=True, readonly=True),
- 'server' : fields.char('Server', size=256, required=True, readonly=True, states={'draft':[('readonly', False)]}),
+ '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)]}),
'type':fields.selection([
('pop', 'POP Server'),
('imap', 'IMAP Server'),
- ], 'Server Type', select=True, readonly=False),
- 'is_ssl':fields.boolean('SSL ?', required=False),
- 'attach':fields.boolean('Add Attachments ?', required=False, help="Fetches mail with attachments if true."),
- 'date': fields.date('Date', readonly=True, states={'draft':[('readonly', False)]}),
- 'user' : fields.char('User Name', size=256, required=True, readonly=True, states={'draft':[('readonly', False)]}),
- 'password' : fields.char('Password', size=1024, invisible=True, required=True, readonly=True, states={'draft':[('readonly', False)]}),
+ ], '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. "
+ "If not enabled, incoming emails will be stripped of any attachments before being processed"),
+ '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)]}),
'note': fields.text('Description'),
- 'action_id':fields.many2one('ir.actions.server', 'Email Server Action', required=False, domain="[('state','=','email')]", help="An Email Server Action. It will be run whenever an e-mail is fetched from server."),
- 'object_id': fields.many2one('ir.model', "Object To Create", required=True, help="Whenever an email arrives, it automatically creates the object of this type with all the information attached."),
- 'priority': fields.integer('Server Priority', readonly=True, states={'draft':[('readonly', False)]}, help="Priority between 0 to 10, select define the order of Processing"),
- 'user_id':fields.many2one('res.users', 'User', required=False, help="This is the user that runs the cron"),
- 'message_ids': fields.one2many('mailgate.message', 'server_id', 'Messages', readonly=True),
+ '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', "Target document type", required=True, help="Process each incoming mail as part of a conversation "
+ "corresponding to this document type. This will create "
+ "new documents for new conversations, or attach follow-up "
+ "emails to the existing conversations (documents)."),
+ '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),
}
_defaults = {
- 'state': lambda *a: "draft",
- 'active': lambda *a: True,
- 'priority': lambda *a: 5,
- 'date': lambda *a: time.strftime('%Y-%m-%d'),
- 'user_id': lambda self, cr, uid, ctx: uid,
+ 'state': "draft",
+ 'active': True,
+ 'priority': 5,
+ 'attach': True,
}
- def check_duplicate(self, cr, uid, ids, context=None):
- # RFC *-* Why this limitation? why not in SQL constraint?
- vals = self.read(cr, uid, ids, ['user', 'password'], context=context)[0]
- cr.execute("select count(id) from email_server where user=%s and password=%s", (vals['user'], vals['password']))
- res = cr.fetchone()
- if res:
- if res[0] > 1:
- return False
- return True
-
- def check_model(self, cr, uid, ids, context = None):
- if context is None:
- context = {}
- current_rec = self.read(cr, uid, ids, context)
- if current_rec:
- current_rec = current_rec[0]
- model_name = self.pool.get('ir.model').browse(cr, uid, current_rec.get('object_id')[0]).model
- model = self.pool.get(model_name)
- if hasattr(model, 'message_new'):
- return True
- return False
-
- _constraints = [
- (check_duplicate, 'Warning! Can\'t have duplicate server configuration!', ['user', 'password']),
- (check_model, 'Warning! Record for selected Model can not be created\nPlease choose valid Model', ['object_id'])
- ]
-
def onchange_server_type(self, cr, uid, ids, server_type=False, ssl=False):
port = 0
if server_type == 'pop':
port = ssl and 995 or 110
elif server_type == 'imap':
port = ssl and 993 or 143
-
return {'value':{'port':port}}
def set_draft(self, cr, uid, ids, context=None):
self.write(cr, uid, ids , {'state':'draft'})
return True
-
+
+ def connect(self, cr, uid, server_id, context=None):
+ if isinstance(server_id, (list,tuple)):
+ server_id = server_id[0]
+ server = self.browse(cr, uid, server_id, context)
+ if server.type == 'imap':
+ if server.is_ssl:
+ connection = IMAP4_SSL(server.server, int(server.port))
+ else:
+ connection = IMAP4(server.server, int(server.port))
+ connection.login(server.user, server.password)
+ elif server.type == 'pop':
+ if server.is_ssl:
+ connection = POP3_SSL(server.server, int(server.port))
+ else:
+ connection = POP3(server.server, int(server.port))
+ #TODO: use this to remove only unread messages
+ #connection.user("recent:"+server.user)
+ connection.user(server.user)
+ connection.pass_(server.password)
+ return connection
+
def button_confirm_login(self, cr, uid, ids, context=None):
if context is None:
context = {}
for server in self.browse(cr, uid, ids, context=context):
- logger.notifyChannel(server.type, netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name))
- context.update({'server_id': server.id, 'server_type': server.type})
try:
- if server.type == 'imap':
- imap_server = None
- if server.is_ssl:
- imap_server = IMAP4_SSL(server.server, int(server.port))
- else:
- imap_server = IMAP4(server.server, int(server.port))
-
- imap_server.login(server.user, server.password)
- ret_server = imap_server
-
- elif server.type == 'pop':
- pop_server = None
- if server.is_ssl:
- pop_server = POP3_SSL(server.server, int(server.port))
- else:
- pop_server = POP3(server.server, int(server.port))
-
- #TODO: use this to remove only unread messages
- #pop_server.user("recent:"+server.user)
- pop_server.user(server.user)
- pop_server.pass_(server.password)
- ret_server = pop_server
-
- self.write(cr, uid, [server.id], {'state':'done'})
- if context.get('get_server',False):
- return ret_server
+ connection = server.connect()
+ server.write({'state':'done'})
except Exception, e:
- logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (e))
- return True
-
- def button_fetch_mail(self, cr, uid, ids, context=None):
- self.fetch_mail(cr, uid, ids, context=context)
+ logger.exception("Failed to connect to %s server %s", server.type, server.name)
+ raise osv.except_osv(_("Connection test failed!"), _("Here is what we got instead:\n %s") % e)
+ finally:
+ try:
+ if connection:
+ if server.type == 'imap':
+ connection.close()
+ elif server.type == 'pop':
+ connection.quit()
+ except Exception:
+ # ignored, just a consequence of the previous exception
+ pass
return True
def _fetch_mails(self, cr, uid, ids=False, context=None):
if not ids:
- ids = self.search(cr, uid, [])
+ ids = self.search(cr, uid, [('state','=','done')])
return self.fetch_mail(cr, uid, ids, context=context)
def fetch_mail(self, cr, uid, ids, context=None):
+ """WARNING: meant for cron usage only - will commit() after each email!"""
if context is None:
context = {}
- email_tool = self.pool.get('email.server.tools')
+ mail_thread = self.pool.get('mail.thread')
action_pool = self.pool.get('ir.actions.server')
- context.update({'get_server': True})
for server in self.browse(cr, uid, ids, context=context):
+ logger.info('start checking for new emails on %s server %s', server.type, server.name)
+ context.update({'fetchmail_server_id': server.id, 'server_type': server.type})
count = 0
- user = server.user_id.id or uid
- try:
- if server.type == 'imap':
- imap_server = self.button_confirm_login(cr, uid, [server.id], context=context)
+ if server.type == 'imap':
+ try:
+ imap_server = server.connect()
imap_server.select()
result, data = imap_server.search(None, '(UNSEEN)')
for num in data[0].split():
result, data = imap_server.fetch(num, '(RFC822)')
- res_id = email_tool.process_email(cr, user, server.object_id.model, data[0][1], attach=server.attach, context=context)
+ res_id = mail_thread.message_process(cr, uid, server.object_id.model, data[0][1],
+ save_original=server.original,
+ strip_attachments=(not server.attach),
+ context=context)
if res_id and server.action_id:
- action_pool.run(cr, user, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
-
+ action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
imap_server.store(num, '+FLAGS', '\\Seen')
+ cr.commit()
count += 1
- logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch/process %s email(s) from %s' % (count, server.name))
-
- imap_server.close()
- imap_server.logout()
- elif server.type == 'pop':
- pop_server = self.button_confirm_login(cr, uid, [server.id], context=context)
- pop_server.list()
+ logger.info("fetched/processed %s email(s) on %s server %s", count, server.type, server.name)
+ except Exception, e:
+ logger.exception("Failed to fetch mail from %s server %s", server.type, server.name)
+ finally:
+ if imap_server:
+ imap_server.close()
+ imap_server.logout()
+ elif server.type == 'pop':
+ try:
+ pop_server = server.connect()
(numMsgs, totalSize) = pop_server.stat()
+ pop_server.list()
for num in range(1, numMsgs + 1):
(header, msges, octets) = pop_server.retr(num)
msg = '\n'.join(msges)
- res_id = email_tool.process_email(cr, user, server.object_id.model, msg, attach=server.attach, context=context)
+ res_id = mail_thread.message_process(cr, uid, server.object_id.model,
+ msg,
+ save_original=server.original,
+ strip_attachments=(not server.attach),
+ context=context)
if res_id and server.action_id:
- action_pool.run(cr, user, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
-
+ action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]})
pop_server.dele(num)
-
- pop_server.quit()
-
- logger.notifyChannel(server.type, netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name))
-
- except Exception, e:
- logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (tools.ustr(e)))
-
+ cr.commit()
+ logger.info("fetched/processed %s email(s) on %s server %s", numMsgs, server.type, server.name)
+ except Exception, e:
+ logger.exception("Failed to fetch mail from %s server %s", server.type, server.name)
+ finally:
+ if pop_server:
+ pop_server.quit()
+ server.write({'date': time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)})
return True
-email_server()
-
-class mailgate_message(osv.osv):
-
- _inherit = "mailgate.message"
-
+class mail_message(osv.osv):
+ _inherit = "mail.message"
_columns = {
- 'server_id': fields.many2one('email.server', "Mail Server", readonly=True, select=True),
- 'server_type':fields.selection([
- ('pop', 'POP Server'),
- ('imap', 'IMAP Server'),
- ], 'Server Type', select=True, readonly=True),
+ 'fetchmail_server_id': fields.many2one('fetchmail.server', "Inbound Mail Server",
+ readonly=True,
+ select=True,
+ oldname='server_id'),
}
- _order = 'id desc'
def create(self, cr, uid, values, context=None):
if context is None:
context={}
- server_id = context.get('server_id',False)
- server_type = context.get('server_type',False)
- if server_id:
- values['server_id'] = server_id
- if server_type:
- values['server_type'] = server_type
- res = super(mailgate_message,self).create(cr, uid, values, context=context)
+ fetchmail_server_id = context.get('fetchmail_server_id')
+ if fetchmail_server_id:
+ values['fetchmail_server_id'] = fetchmail_server_id
+ res = super(mail_message,self).create(cr, uid, values, context=context)
return res
def write(self, cr, uid, ids, values, context=None):
if context is None:
context={}
- server_id = context.get('server_id',False)
- server_type = context.get('server_type',False)
- if server_id:
- values['server_id'] = server_id
- if server_type:
- values['server_type'] = server_type
- res = super(mailgate_message,self).write(cr, uid, ids, values, context=context)
+ fetchmail_server_id = context.get('fetchmail_server_id')
+ if fetchmail_server_id:
+ values['fetchmail_server_id'] = server_id
+ res = super(mail_message,self).write(cr, uid, ids, values, context=context)
return res
-mailgate_message()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail/fetchmail_data.xml b/addons/fetchmail/fetchmail_data.xml
index ef40a76489f..d77aadc12de 100644
--- a/addons/fetchmail/fetchmail_data.xml
+++ b/addons/fetchmail/fetchmail_data.xml
@@ -6,10 +6,10 @@
<field name="interval_number">5</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
- <field eval="False" name="doall"/>
- <field eval="'email.server'" name="model"/>
- <field eval="'_fetch_mails'" name="function"/>
- <field eval="'()'" name="args"/>
+ <field name="doall" eval="False"/>
+ <field name="model">fetchmail.server</field>
+ <field name="function">_fetch_mails</field>
+ <field name="args">()</field>
</record>
</data>
</openerp>
diff --git a/addons/fetchmail/fetchmail_installer_view.xml b/addons/fetchmail/fetchmail_installer_view.xml
index 34cfc686a8d..911ad8101da 100644
--- a/addons/fetchmail/fetchmail_installer_view.xml
+++ b/addons/fetchmail/fetchmail_installer_view.xml
@@ -1,9 +1,9 @@
<openerp>
<data>
<record model="ir.actions.act_window" id="view_email_server_form_installer">
- <field name="name">Setup Your Mail server</field>
+ <field name="name">Setup Incoming Mail Server (fetchmail)</field>
<field name="type">ir.actions.act_window</field>
- <field name="res_model">email.server</field>
+ <field name="res_model">fetchmail.server</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="fetchmail.view_email_server_form"/>
diff --git a/addons/fetchmail/fetchmail_view.xml b/addons/fetchmail/fetchmail_view.xml
index 364d9bbe47f..05f62f4b9fb 100644
--- a/addons/fetchmail/fetchmail_view.xml
+++ b/addons/fetchmail/fetchmail_view.xml
@@ -1,44 +1,42 @@
<?xml version="1.0"?>
<openerp>
<data>
-
+
<record model="ir.ui.view" id="view_email_server_tree">
- <field name="name">email.server.tree</field>
- <field name="model">email.server</field>
+ <field name="name">fetchmail.server.list</field>
+ <field name="model">fetchmail.server</field>
<field name="type">tree</field>
<field name="arch" type="xml">
- <tree colors="blue:state == 'draft';black:state == 'waiting';gray:state == 'done'" string="POP/IMAP Servers">
+ <tree colors="blue:state == 'draft'" string="POP/IMAP Servers">
<field name="name"/>
<field name="type"/>
- <field name="user"/>
<field name="is_ssl"/>
<field name="object_id"/>
+ <field name="date"/>
<field name="message_ids" string="# of emails"/>
<field name="state"/>
</tree>
</field>
</record>
-
+
<record model="ir.ui.view" id="view_email_server_form">
- <field name="name">email.server.form</field>
- <field name="model">email.server</field>
+ <field name="name">fetchmail.server.form</field>
+ <field name="model">fetchmail.server</field>
<field name="type">form</field>
<field name="arch" type="xml">
- <form string="POP/IMAP Server">
+ <form string="Incoming Mail Server">
<group col="6" colspan="4">
<field name="name" select="1" colspan="4"/>
<field name="type" select="1" on_change="onchange_server_type(type, is_ssl)"/>
<field name="date" select="1"/>
- <field name="attach"/>
- <field name="active" select="1"/>
</group>
<notebook colspan="4">
<page string="Server &amp; Login">
- <group col="2" colspan="2">
+ <group col="4" colspan="2">
<separator string="Server Information" colspan="2"/>
- <field name="is_ssl" select="1" on_change="onchange_server_type(type, is_ssl)"/>
- <field name="server" />
+ <field name="server" colspan="4"/>
<field name="port" />
+ <field name="is_ssl" select="1" on_change="onchange_server_type(type, is_ssl)"/>
</group>
<group col="2" colspan="2">
<separator string="Login Information" colspan="2"/>
@@ -46,35 +44,39 @@
<field name="password" password="True" />
</group>
<group col="2" colspan="2">
- <separator string="Auto Reply?" colspan="2"/>
- <field name="action_id"/>
- <field name="user_id"/>
- </group>
- <group col="2" colspan="2">
- <separator string="Process Parameter" colspan="2"/>
+ <separator string="Automated Processing" colspan="2"/>
<field name="object_id"/>
- <field name="priority"/>
+ <field name="action_id"/>
</group>
<separator string="Description" colspan="4"/>
<field name="note" colspan="4" nolabel="1"/>
</page>
+ <page string="Advanced">
+ <group colspan="2" col="2">
+ <separator string="Advanced options" colspan="2"/>
+ <field name="priority"/>
+ <field name="attach"/>
+ <field name="original"/>
+ <field name="active" select="1"/>
+ </group>
+ </page>
</notebook>
<group col="6" colspan="4">
<field name="state" select="1"/>
- <button string="Confirm" type="object" name="button_confirm_login" states="draft" icon="gtk-apply"/>
- <button string="Fetch Emails" type="object" name="button_fetch_mail" states="done"/>
- <button string="Set to Draft" type="object" name="set_draft" icon="gtk-convert"/>
+ <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"/>
+ <button string="Fetch Now" type="object" name="fetch_mail" states="done" icon="gtk-network"/>
</group>
</form>
</field>
</record>
-
+
<record model="ir.ui.view" id="view_email_server_search">
- <field name="name">email.server.search</field>
- <field name="model">email.server</field>
+ <field name="name">fetchmail.server.search</field>
+ <field name="model">fetchmail.server</field>
<field name="type">search</field>
<field name="arch" type="xml">
- <search string="Search Email Servers">
+ <search string="Search Incoming Mail Servers">
<filter string="IMAP" icon="terp-folder-green" domain="[('type','=','imap')]" help="Server type IMAP."/>
<filter string="POP" icon="terp-folder-orange" domain="[('type','=','pop')]" help="Server type POP."/>
<separator orientation="vertical"/>
@@ -91,68 +93,52 @@
</search>
</field>
</record>
-
+
<record model="ir.actions.act_window" id="action_email_server_tree">
- <field name="name">Email Servers</field>
- <field name="res_model">email.server</field>
+ <field name="name">Incoming Mail Servers</field>
+ <field name="res_model">fetchmail.server</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_email_server_tree"/>
<field name="search_view_id" ref="view_email_server_search"/>
</record>
- <menuitem
- parent="base.menu_mail_gateway"
+ <menuitem
+ parent="base.next_id_15"
id="menu_action_fetchmail_server_tree"
- action="action_email_server_tree"
- name="Email Servers"
+ action="action_email_server_tree"
+ name="Incoming Mail Servers"
+ sequence="40"
/>
-
- <record model="ir.ui.view" id="mailgate_message_tree_view">
- <field name="name">mailgate.message.tree</field>
- <field name="model">mailgate.message</field>
- <field name="type">tree</field>
- <field name="inherit_id" ref="mail_gateway.view_mailgate_message_tree"/>
- <field name="arch" type="xml">
- <field name="user_id" position="after">
- <field name="server_id" select="1"/>
- <field name="ref_id"/>
- </field>
- </field>
+
+ <record model="ir.ui.view" id="email_message_tree_view">
+ <field name="name">mail.message.list.fetchmail</field>
+ <field name="model">mail.message</field>
+ <field name="type">tree</field>
+ <field name="inherit_id" ref="mail.view_email_message_tree"/>
+ <field name="arch" type="xml">
+ <field name="user_id" position="after">
+ <field name="fetchmail_server_id" select="1"/>
+ </field>
+ </field>
</record>
-
- <record model="ir.ui.view" id="mailgate_message_search_view">
- <field name="name">mailgate.message.inherit.search</field>
- <field name="model">mailgate.message</field>
- <field name="type">search</field>
- <field name="inherit_id" ref="mail_gateway.view_mailgate_message_search"/>
- <field name="arch" type="xml">
- <xpath expr="/search/field[@name='name']" position="before">
- <filter string="Emails" name="emails" domain="[('server_id','!=',False)]" icon="terp-mail-message-new"/>
- <separator orientation="vertical"/>
- </xpath>
- <xpath expr="/search/group/filter[@string='Thread']" position="before">
- <filter string="Mail Server" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'server_id'}"/>
+
+ <record model="ir.ui.view" id="email_message_search_view">
+ <field name="name">mail.message.inherit.search</field>
+ <field name="model">mail.message</field>
+ <field name="type">search</field>
+ <field name="inherit_id" ref="mail.view_email_message_search"/>
+ <field name="arch" type="xml">
+ <xpath expr="/search/group/filter[@string='Thread']" position="before">
+ <filter string="Mail Server" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'fetchmail_server_id'}"/>
</xpath>
- </field>
+ </field>
</record>
-
- <record id="action_view_mail_message_emails" model="ir.actions.act_window">
- <field name="name">Messages</field>
- <field name="res_model">mailgate.message</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- <field name="context">{'search_default_emails': 1}</field>
- <field name="search_view_id" ref="mailgate_message_search_view"/>
- </record>
-
- <menuitem id="base.menu_email_gateway_form"
- parent="base.menu_mail_gateway" action="action_view_mail_message_emails" />
- <act_window
- context="{'search_default_server_id': [active_id], 'default_server_id': active_id}"
- id="act_server_history" name="Emails"
- res_model="mailgate.message" src_model="email.server"/>
-
+ <act_window
+ context="{'search_default_server_id': active_id, 'default_server_id': active_id}"
+ id="act_server_history" name="Messages" domain="[('email_from', '!=', False), ('fetchmail_server_id', '=', active_id)]"
+ res_model="mail.message" src_model="fetchmail.server"/>
+
</data>
</openerp>
diff --git a/addons/fetchmail/security/ir.model.access.csv b/addons/fetchmail/security/ir.model.access.csv
index 7aa6c84d22b..bc5572de82d 100644
--- a/addons/fetchmail/security/ir.model.access.csv
+++ b/addons/fetchmail/security/ir.model.access.csv
@@ -1,2 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_email_server","email.server","model_email_server",,1,1,1,1
+"access_fetchmail_server","fetchmail.server","model_fetchmail_server",,1,0,0,0
+"access_fetchmail_server","fetchmail.server","model_fetchmail_server","base.group_system",1,1,1,1