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..3dc0ee4ba --- /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': '8.0.1.0.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 000000000..955b8138f Binary files /dev/null and b/fetchmail_notify_error_to_sender/static/description/icon.png differ