From 1217f0c77b75d1647e9fc0c3c2613ed5146829cf Mon Sep 17 00:00:00 2001 From: eLBati Date: Tue, 30 Jun 2015 19:35:54 +0200 Subject: [PATCH] [ADD] module fetchmail_notify_error_to_sender --- fetchmail_notify_error_to_sender/README.rst | 50 ++++++++++++ fetchmail_notify_error_to_sender/__init__.py | 22 +++++ .../__openerp__.py | 40 ++++++++++ .../email_template_data.xml | 27 +++++++ fetchmail_notify_error_to_sender/fetchmail.py | 30 +++++++ .../fetchmail_view.xml | 16 ++++ .../mail_thread.py | 75 ++++++++++++++++++ .../static/description/icon.png | Bin 0 -> 3274 bytes 8 files changed, 260 insertions(+) create mode 100644 fetchmail_notify_error_to_sender/README.rst create mode 100644 fetchmail_notify_error_to_sender/__init__.py create mode 100644 fetchmail_notify_error_to_sender/__openerp__.py create mode 100644 fetchmail_notify_error_to_sender/email_template_data.xml create mode 100644 fetchmail_notify_error_to_sender/fetchmail.py create mode 100644 fetchmail_notify_error_to_sender/fetchmail_view.xml create mode 100644 fetchmail_notify_error_to_sender/mail_thread.py create mode 100644 fetchmail_notify_error_to_sender/static/description/icon.png diff --git a/fetchmail_notify_error_to_sender/README.rst b/fetchmail_notify_error_to_sender/README.rst new file mode 100644 index 000000000..b8dbd0ad1 --- /dev/null +++ b/fetchmail_notify_error_to_sender/README.rst @@ -0,0 +1,50 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :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. + +This module allows 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. + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + + +Credits +======= + +Contributors +------------ + +* Lorenzo Battistini + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. diff --git a/fetchmail_notify_error_to_sender/__init__.py b/fetchmail_notify_error_to_sender/__init__.py new file mode 100644 index 000000000..6caf7ed3b --- /dev/null +++ b/fetchmail_notify_error_to_sender/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2015 Lorenzo Battistini +# +# 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 . import mail_thread +from . import fetchmail diff --git a/fetchmail_notify_error_to_sender/__openerp__.py b/fetchmail_notify_error_to_sender/__openerp__.py new file mode 100644 index 000000000..30e19365c --- /dev/null +++ b/fetchmail_notify_error_to_sender/__openerp__.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2015 Lorenzo Battistini +# +# 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': 'Send notice on fetchmail errors', + 'summary': 'If fetching mails gives error, send an email to sender', + 'version': '1.0', + 'category': 'Tools', + 'author': "Agile Business Group,Odoo Community Association (OCA)", + 'website': 'http://www.agilebg.com', + 'license': 'AGPL-3', + 'depends': [ + 'fetchmail', + ], + 'data': [ + 'fetchmail_view.xml', + 'email_template_data.xml', + ], + 'qweb': [ + ], + 'installable': True, + 'auto_install': False, +} diff --git a/fetchmail_notify_error_to_sender/email_template_data.xml b/fetchmail_notify_error_to_sender/email_template_data.xml new file mode 100644 index 000000000..6d98a9725 --- /dev/null +++ b/fetchmail_notify_error_to_sender/email_template_data.xml @@ -0,0 +1,27 @@ + + + + + + + Fetchmail - error notice + ${ctx.get('sender_message').get('to')|safe} + ${ctx.get('sender_message').get('from')|safe} + Receiving error with: ${ctx.get('sender_message').get('subject')|safe} + + + + ${ctx.get('lang')} + +

Hello ${ctx.get('sender_message').get('from')},

+

we got a problem with your email: ${ctx.get('sender_message').get('subject')}

+

Maybe you used a wrong recipient address?

+


+

Technical details:

+

${ctx.get('route_exception').message}

+ + ]]>
+
+
+
diff --git a/fetchmail_notify_error_to_sender/fetchmail.py b/fetchmail_notify_error_to_sender/fetchmail.py new file mode 100644 index 000000000..97233d486 --- /dev/null +++ b/fetchmail_notify_error_to_sender/fetchmail.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2015 Lorenzo Battistini +# +# 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 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") diff --git a/fetchmail_notify_error_to_sender/fetchmail_view.xml b/fetchmail_notify_error_to_sender/fetchmail_view.xml new file mode 100644 index 000000000..2364f95ad --- /dev/null +++ b/fetchmail_notify_error_to_sender/fetchmail_view.xml @@ -0,0 +1,16 @@ + + + + + + fetchmail.server.form + fetchmail.server + + + + + + + + + diff --git a/fetchmail_notify_error_to_sender/mail_thread.py b/fetchmail_notify_error_to_sender/mail_thread.py new file mode 100644 index 000000000..19eddcac4 --- /dev/null +++ b/fetchmail_notify_error_to_sender/mail_thread.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2015 Lorenzo Battistini +# +# 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 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 diff --git a/fetchmail_notify_error_to_sender/static/description/icon.png b/fetchmail_notify_error_to_sender/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..955b8138f60c5e0a115b989c2e9569cf53c880af GIT binary patch literal 3274 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 Vn$ItZl+Or2U&mOxO7l_VzW@d(7|;L! literal 0 HcmV?d00001