Browse Source

[MIG] fetchmail_notify_error_to_sender

pull/1306/head
mreficent 8 years ago
committed by Pedro M. Baeza
parent
commit
2d5f96de73
  1. 47
      fetchmail_notify_error_to_sender/README.rst
  2. 24
      fetchmail_notify_error_to_sender/__init__.py
  3. 33
      fetchmail_notify_error_to_sender/__openerp__.py
  4. 3
      fetchmail_notify_error_to_sender/data/email_template_data.xml
  5. 30
      fetchmail_notify_error_to_sender/fetchmail.py
  6. 4
      fetchmail_notify_error_to_sender/i18n/de.po
  7. 4
      fetchmail_notify_error_to_sender/i18n/es.po
  8. 4
      fetchmail_notify_error_to_sender/i18n/fr.po
  9. 4
      fetchmail_notify_error_to_sender/i18n/it.po
  10. 4
      fetchmail_notify_error_to_sender/i18n/pt_BR.po
  11. 4
      fetchmail_notify_error_to_sender/i18n/pt_PT.po
  12. 4
      fetchmail_notify_error_to_sender/i18n/sl.po
  13. 4
      fetchmail_notify_error_to_sender/i18n/tr.po
  14. 75
      fetchmail_notify_error_to_sender/mail_thread.py
  15. 6
      fetchmail_notify_error_to_sender/models/__init__.py
  16. 15
      fetchmail_notify_error_to_sender/models/fetchmail.py
  17. 53
      fetchmail_notify_error_to_sender/models/mail_thread.py
  18. 11
      fetchmail_notify_error_to_sender/views/fetchmail_view.xml

47
fetchmail_notify_error_to_sender/README.rst

@ -1,38 +1,63 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===============================
Send notice on fetchmail errors
===============================
If fetchmail is not able to correctly route an email, the email is "silently" lost (you get an error message in server log).
For example, if you configure odoo mail system to route received emails according to recipient address, it may happen users send emails to wrong email address.
If fetchmail is not able to correctly route an email, the email is
"silently" lost (you get an error message in server log).
For example, if you configure odoo mail system to route received emails
according to recipient address, it may happen users send emails to wrong
email address.
This module allows to automatically send a notification email to sender, when odoo can't correctly process the received email.
This module extends the functionality of fetchmail to allow you to
automatically send a notification email to sender, when odoo can't
correctly process the received email.
Configuration
=============
Configure your fetchmail server setting 'Error notice template' = 'Fetchmail - error notice'.
You can edit the 'Fetchmail - error notice' email template according to your needs.
To configure this module, you need to:
#. Configure your fetchmail server setting 'Error notice template' = 'Fetchmail - error notice'.
#. You can edit the 'Fetchmail - error notice' email template according to your needs.
.. figure:: path/to/local/image.png
:alt: alternative description
:width: 600 px
Usage
=====
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/149/9.0
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
`here <https://github.com/OCA/server-tools/issues/new?body=module:%20fetchmail_notify_error_to_sender%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smash it by providing detailed and welcomed feedback.
Credits
=======
Images
------
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
Contributors
------------
* Lorenzo Battistini <lorenzo.battistini@agilebg.com>
* Miquel Raïch <miquel.raich@eficent.com> (migration to v9)
Maintainer
----------
@ -47,4 +72,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.
To contribute to this module, please visit https://odoo-community.org.

24
fetchmail_notify_error_to_sender/__init__.py

@ -1,22 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# Copyright 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
# Copyright 2017 Eficent <http://www.eficent.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import mail_thread
from . import fetchmail
from . import models

33
fetchmail_notify_error_to_sender/__openerp__.py

@ -1,40 +1,25 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# Copyright 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
# Copyright 2017 Eficent <http://www.eficent.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Send notice on fetchmail errors',
'summary': 'If fetching mails gives error, send an email to sender',
'version': '8.0.1.0.1',
'version': '9.0.1.0.0',
'category': 'Tools',
'author': "Agile Business Group,Odoo Community Association (OCA)",
'website': 'http://www.agilebg.com',
'author': "Agile Business Group,Eficent,Odoo Community Association (OCA)",
'website': 'https://github.com/OCA/server-tools',
'license': 'AGPL-3',
'depends': [
'fetchmail',
],
'data': [
'fetchmail_view.xml',
'email_template_data.xml',
'views/fetchmail_view.xml',
'data/email_template_data.xml',
],
'qweb': [
],
'installable': True,
'auto_install': False,
'application': False,
}

3
fetchmail_notify_error_to_sender/email_template_data.xml → fetchmail_notify_error_to_sender/data/email_template_data.xml

@ -1,9 +1,8 @@
<?xml version="1.0" ?>
<openerp>
<data noupdate="1">
<!--Email template -->
<record id="email_template_error_notice" model="email.template">
<record id="email_template_error_notice" model="mail.template">
<field name="name">Fetchmail - error notice</field>
<field name="email_from">${ctx.get('sender_message').get('to')|safe}</field>
<field name="email_to">${ctx.get('sender_message').get('from')|safe}</field>

30
fetchmail_notify_error_to_sender/fetchmail.py

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, fields
class fetchmail_server(models.Model):
_inherit = 'fetchmail.server'
error_notice_template_id = fields.Many2one(
'email.template', string="Error notice template",
help="Set here the template to use to send notice to sender when "
"errors occur while fetching email")

4
fetchmail_notify_error_to_sender/i18n/de.po

@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -49,7 +49,7 @@ msgid "POP/IMAP Server"
msgstr "POP/IMAP Server"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr "Erhalte Fehler mit: ${ctx.get('sender_message').get('subject')|safe}"

4
fetchmail_notify_error_to_sender/i18n/es.po

@ -48,7 +48,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -78,7 +78,7 @@ msgid "POP/IMAP Server"
msgstr "Servidor POP/IMAP"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr ""

4
fetchmail_notify_error_to_sender/i18n/fr.po

@ -49,7 +49,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -79,7 +79,7 @@ msgid "POP/IMAP Server"
msgstr "Serveur POP/IMAP"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr "Reçu une erreur avec : ${ctx.get('sender_message').get('subject')|safe}"

4
fetchmail_notify_error_to_sender/i18n/it.po

@ -27,7 +27,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -57,7 +57,7 @@ msgid "POP/IMAP Server"
msgstr "Server POP/IMAP"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr ""

4
fetchmail_notify_error_to_sender/i18n/pt_BR.po

@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -49,7 +49,7 @@ msgid "POP/IMAP Server"
msgstr "Servidor POP/IMAP"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr "Recebendo erro com: ${ctx.get('sender_message').get('subject')|safe}"

4
fetchmail_notify_error_to_sender/i18n/pt_PT.po

@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -48,7 +48,7 @@ msgid "POP/IMAP Server"
msgstr ""
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr ""

4
fetchmail_notify_error_to_sender/i18n/sl.po

@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -49,7 +49,7 @@ msgid "POP/IMAP Server"
msgstr "POP/IMAP strežnik"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr "Napaka pri prejemu: ${ctx.get('sender_message').get('subject')|safe}"

4
fetchmail_notify_error_to_sender/i18n/tr.po

@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,body_html:fetchmail_notify_error_to_sender.email_template_error_notice
msgid ""
"\n"
"<div>\n"
@ -49,7 +49,7 @@ msgid "POP/IMAP Server"
msgstr "POP/IMAP sunucu"
#. module: fetchmail_notify_error_to_sender
#: model:email.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
#: model:mail.template,subject:fetchmail_notify_error_to_sender.email_template_error_notice
msgid "Receiving error with: ${ctx.get('sender_message').get('subject')|safe}"
msgstr "Alınan hata : ${ctx.get('sender_message').get('subject')|safe}"

75
fetchmail_notify_error_to_sender/mail_thread.py

@ -1,75 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import osv
class mail_thread(osv.AbstractModel):
_inherit = 'mail.thread'
def message_route_verify(
self, cr, uid, message, message_dict, route, update_author=True,
assert_model=True, create_fallback=True, allow_private=False,
context=None
):
res = ()
if context is None:
context = {}
try:
res = super(mail_thread, self).message_route_verify(
cr, uid, message, message_dict, route,
update_author=update_author, assert_model=assert_model,
create_fallback=create_fallback, allow_private=allow_private,
context=context)
except ValueError as ve:
fetchmail_server_id = context.get('fetchmail_server_id')
if not fetchmail_server_id:
raise ve
fetchmail_server = self.pool['fetchmail.server'].browse(
cr, uid, fetchmail_server_id, context)
if not fetchmail_server.error_notice_template_id:
raise ve
context['sender_message'] = message
context['route_exception'] = ve
self.pool['email.template'].send_mail(
cr, uid, fetchmail_server.error_notice_template_id.id,
fetchmail_server.id, context=context)
context['error_notice_sent'] = True
return res
def message_route(
self, cr, uid, message, message_dict, model=None, thread_id=None,
custom_values=None, context=None
):
if context is None:
context = {}
res = []
try:
res = super(mail_thread, self).message_route(
cr, uid, message, message_dict, model=model,
thread_id=thread_id, custom_values=custom_values,
context=context)
except ValueError as ve:
if context.get('error_notice_sent'):
# avoid raising exception and setting mail message UNSEEN
return []
else:
raise ve
return res

6
fetchmail_notify_error_to_sender/models/__init__.py

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2017 Eficent <http://www.eficent.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import fetchmail
from . import mail_thread

15
fetchmail_notify_error_to_sender/models/fetchmail.py

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
# Copyright 2017 Eficent <http://www.eficent.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import fields, models
class FetchmailServer(models.Model):
_inherit = 'fetchmail.server'
error_notice_template_id = fields.Many2one(
'mail.template', string="Error notice template",
help="Set here the template to use to send notice to sender when "
"errors occur while fetching email")

53
fetchmail_notify_error_to_sender/models/mail_thread.py

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Copyright 2015 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
# Copyright 2017 Eficent <http://www.eficent.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import api, models
class MailThread(models.AbstractModel):
_inherit = 'mail.thread'
@api.model
def message_route_verify(
self, message, message_dict, route, update_author=True,
assert_model=True, create_fallback=True, allow_private=False):
res = ()
try:
res = super(MailThread, self).message_route_verify(
message, message_dict, route,
update_author=update_author, assert_model=assert_model,
create_fallback=create_fallback, allow_private=allow_private)
except ValueError as ve:
fetchmail_server_id = self.env.context.get('fetchmail_server_id')
if not fetchmail_server_id:
raise ve
fetchmail_server = self.pool['fetchmail.server'].browse(
fetchmail_server_id)
if not fetchmail_server.error_notice_template_id:
raise ve
self.env.context['sender_message'] = message
self.env.context['route_exception'] = ve
self.env['mail.template'].send_mail(
fetchmail_server.error_notice_template_id.id,
fetchmail_server.id)
self.env.context['error_notice_sent'] = True
return res
@api.model
def message_route(
self, message, message_dict, model=None, thread_id=None,
custom_values=None):
res = []
try:
res = super(MailThread, self).message_route(
message, message_dict, model=model,
thread_id=thread_id, custom_values=custom_values)
except ValueError as ve:
if self.env.context.get('error_notice_sent'):
# avoid raising exception and setting mail message UNSEEN
return []
else:
raise ve
return res

11
fetchmail_notify_error_to_sender/fetchmail_view.xml → fetchmail_notify_error_to_sender/views/fetchmail_view.xml

@ -1,16 +1,13 @@
<?xml version="1.0"?>
<openerp>
<data>
<odoo>
<record model="ir.ui.view" id="view_email_server_form">
<field name="name">fetchmail.server.form</field>
<field name="model">fetchmail.server</field>
<field name="inherit_id" ref="fetchmail.view_email_server_form"></field>
<field name="arch" type="xml">
<xpath expr="//page[@string='Advanced']/group/field[@name='active']" position="after">
<field name="active" position="after">
<field name="error_notice_template_id"/>
</xpath>
</field>
</field>
</record>
</data>
</openerp>
</odoo>
Loading…
Cancel
Save