diff --git a/README.md b/README.md index 7464fb32a..d437f6235 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ addon | version | maintainers | summary [mail_activity_team](mail_activity_team/) | 18.0.1.0.1 | | Add Teams to Activities [mail_attach_existing_attachment](mail_attach_existing_attachment/) | 18.0.1.0.0 | | Adding attachment on the object by sending this one [mail_attach_existing_attachment_account](mail_attach_existing_attachment_account/) | 18.0.1.0.0 | | Module to use attach existing attachment for account module -[mail_autogenerated_header](mail_autogenerated_header/) | 18.0.1.0.0 | | Add headers to Odoo's mails indicating they are autogenerated +[mail_autogenerated_header](mail_autogenerated_header/) | 18.0.1.1.0 | | Add headers to Odoo's mails indicating they are autogenerated [mail_autosubscribe](mail_autosubscribe/) | 18.0.1.1.0 | | Automatically subscribe partners to its company's business documents [mail_composer_cc_bcc](mail_composer_cc_bcc/) | 18.0.1.0.2 | trisdoan | This module enables sending mail to CC and BCC partners in mail composer form. [mail_debrand](mail_debrand/) | 18.0.1.0.1 | pedrobaeza joao-p-marques | Remove Odoo branding in sent emails Removes anchor 20characters @@ -50,7 +50,7 @@ addon | version | maintainers | summary [mail_send_confirmation](mail_send_confirmation/) | 18.0.1.0.0 | | Mail Send Confirmation [mail_show_follower](mail_show_follower/) | 18.0.1.0.1 | yajo | Show CC document followers in mails. [mail_suggested_recipient_unchecked](mail_suggested_recipient_unchecked/) | 18.0.1.0.0 | victoralmau | Mail suggested recipient unchecked -[mail_tracking](mail_tracking/) | 18.0.1.0.5 | | Email tracking system for all mails sent +[mail_tracking](mail_tracking/) | 18.0.1.0.6 | | Email tracking system for all mails sent [mail_tracking_mailgun](mail_tracking_mailgun/) | 18.0.1.0.0 | | Mail tracking and Mailgun webhooks integration [mail_tracking_mass_mailing](mail_tracking_mass_mailing/) | 18.0.1.0.0 | | Improve mass mailing email tracking diff --git a/mail_autogenerated_header/README.rst b/mail_autogenerated_header/README.rst index 3e7935db2..9f592d172 100644 --- a/mail_autogenerated_header/README.rst +++ b/mail_autogenerated_header/README.rst @@ -11,7 +11,7 @@ Autogenerated headers !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:591306323a242f6435b223e7ce1e718218d0db0b0fd45c776fa0e6715d168207 + !! source digest: sha256:0dd822572bebd34c9e428fe8f7cd191012396cd99b1655fa61c5cbd8dd572bf8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -33,9 +33,9 @@ Autogenerated headers |badge1| |badge2| |badge3| |badge4| |badge5| This module was written to mark Odoo's emails as being autogenerated -according to `RFC 3834 `__, section -5. This allows receiving mail servers to act accordingly by for example -not sending a vacation autoreply. +according to ``RFC 3834 ``\ \_, +section 5. This allows receiving mail servers to act accordingly by for +example not sending a vacation autoreply. On the receiving side, this module drops all notifications for autogenerated incoming e-mails. @@ -51,9 +51,14 @@ broken email servers on the opposite side. Usage ===== -There's nothing the user has to do. Developers can set the context flag +For sending outgoing emails, users can change the config parameter +``mail_autogenerated_header.allow_autogenerated_outgoing`` to ``False`` +to avoid any outgoing emails being marked as autogenerated. For only +avoiding in certain cases, developers can set the context flag ``mail_autogenerated_header_disable`` in calls to ``send_email`` in -order to suppress adding any headers at all, and override +order to suppress adding any autogenerated headers. + +For receiving incoming emails, developers can override the method ``_message_route_process_autoreply`` to fine tune dropping autogenerated mails per model. diff --git a/mail_autogenerated_header/__manifest__.py b/mail_autogenerated_header/__manifest__.py index 2a6118158..947876d36 100644 --- a/mail_autogenerated_header/__manifest__.py +++ b/mail_autogenerated_header/__manifest__.py @@ -3,13 +3,12 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Autogenerated headers", - "version": "18.0.1.0.0", + "version": "18.0.1.1.0", "author": "Hunki Enterprises BV, Therp BV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/mail", "license": "AGPL-3", "category": "Tools", "summary": "Add headers to Odoo's mails indicating they are autogenerated", - "depends": [ - "mail", - ], + "depends": ["mail"], + "data": ["data/ir_config_parameter.xml"], } diff --git a/mail_autogenerated_header/data/ir_config_parameter.xml b/mail_autogenerated_header/data/ir_config_parameter.xml new file mode 100644 index 000000000..8d4cfc3e6 --- /dev/null +++ b/mail_autogenerated_header/data/ir_config_parameter.xml @@ -0,0 +1,7 @@ + + + + mail_autogenerated_header.allow_autogenerated_outgoing + True + + diff --git a/mail_autogenerated_header/models/ir_mail_server.py b/mail_autogenerated_header/models/ir_mail_server.py index eb387f9c3..e6031ca30 100644 --- a/mail_autogenerated_header/models/ir_mail_server.py +++ b/mail_autogenerated_header/models/ir_mail_server.py @@ -22,31 +22,40 @@ def send_email( smtp_debug=False, smtp_session=None, ): - # Inject autogenerated header for autogoing mails - - if not self.env.context.get( - "mail_autogenerated_header_disable" - ) and self._send_email_set_autogenerated( - message, - mail_server_id=mail_server_id, - smtp_server=smtp_server, - smtp_port=smtp_port, - smtp_user=smtp_user, - smtp_password=smtp_password, - smtp_encryption=smtp_encryption, - smtp_ssl_certificate=smtp_ssl_certificate, - smtp_ssl_private_key=smtp_ssl_private_key, - smtp_debug=smtp_debug, - smtp_session=smtp_session, - ): - # MS Exchange's broken version as of - # http://blogs.technet.com/b/exchange/archive/2006/10/06/ - # 3395024.aspx - message["Precedence"] = "bulk" - message["X-Auto-Response-Suppress"] = "OOF" - # The right way to do it as of - # https://tools.ietf.org/html/rfc3834 - message["Auto-Submitted"] = "auto-generated" + # Inject autogenerated header for outgoing mails + allow_autogenerated_outgoing = ( + self.env["ir.config_parameter"] + .sudo() + .get_param("mail_autogenerated_header.allow_autogenerated_outgoing", False) + ) + if allow_autogenerated_outgoing: + mail_autogenerated_header_disable = self.env.context.get( + "mail_autogenerated_header_disable" + ) + if ( + not mail_autogenerated_header_disable + and self._send_email_set_autogenerated( + message, + mail_server_id=mail_server_id, + smtp_server=smtp_server, + smtp_port=smtp_port, + smtp_user=smtp_user, + smtp_password=smtp_password, + smtp_encryption=smtp_encryption, + smtp_ssl_certificate=smtp_ssl_certificate, + smtp_ssl_private_key=smtp_ssl_private_key, + smtp_debug=smtp_debug, + smtp_session=smtp_session, + ) + ): + # MS Exchange's broken version as of + # http://blogs.technet.com/b/exchange/archive/2006/10/06/ + # 3395024.aspx + message["Precedence"] = "bulk" + message["X-Auto-Response-Suppress"] = "OOF" + # The right way to do it as of + # https://tools.ietf.org/html/rfc3834 + message["Auto-Submitted"] = "auto-generated" return super().send_email( message, @@ -77,12 +86,9 @@ def _send_email_set_autogenerated( smtp_debug=False, smtp_session=None, ): - """Determine if some mail should have the autogenerated headers""" - + # Determine if some mail should have the autogenerated headers mail = self.env["mail.mail"].search( - [ - ("message_id", "=", message["Message-Id"]), - ] + [("message_id", "=", message["Message-Id"])] ) if not mail: return False diff --git a/mail_autogenerated_header/readme/DESCRIPTION.md b/mail_autogenerated_header/readme/DESCRIPTION.md index 3e17a4d4f..9f26a0b86 100644 --- a/mail_autogenerated_header/readme/DESCRIPTION.md +++ b/mail_autogenerated_header/readme/DESCRIPTION.md @@ -1,7 +1,6 @@ -This module was written to mark Odoo's emails as being autogenerated -according to [RFC 3834](https://tools.ietf.org/html/rfc3834), section 5. -This allows receiving mail servers to act accordingly by for example not -sending a vacation autoreply. +This module was written to mark Odoo's emails as being autogenerated according +to `RFC 3834 `_, section 5. This allows +receiving mail servers to act accordingly by for example not sending a vacation autoreply. On the receiving side, this module drops all notifications for autogenerated incoming e-mails. diff --git a/mail_autogenerated_header/readme/USAGE.md b/mail_autogenerated_header/readme/USAGE.md index 34380206c..d0e8e8885 100644 --- a/mail_autogenerated_header/readme/USAGE.md +++ b/mail_autogenerated_header/readme/USAGE.md @@ -1,5 +1,10 @@ -There's nothing the user has to do. Developers can set the context flag -`mail_autogenerated_header_disable` in calls to `send_email` in order to -suppress adding any headers at all, and override -`_message_route_process_autoreply` to fine tune dropping autogenerated -mails per model. +For sending outgoing emails, users can change the config parameter +``mail_autogenerated_header.allow_autogenerated_outgoing`` to ``False`` to +avoid any outgoing emails being marked as autogenerated. For only avoiding +in certain cases, developers can set the context flag +``mail_autogenerated_header_disable`` in calls to ``send_email`` in order to +suppress adding any autogenerated headers. + +For receiving incoming emails, developers can override the method +``_message_route_process_autoreply`` to fine tune dropping autogenerated mails +per model. diff --git a/mail_autogenerated_header/static/description/index.html b/mail_autogenerated_header/static/description/index.html index 443b39a36..d5520f1a0 100644 --- a/mail_autogenerated_header/static/description/index.html +++ b/mail_autogenerated_header/static/description/index.html @@ -372,13 +372,13 @@

Autogenerated headers

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:591306323a242f6435b223e7ce1e718218d0db0b0fd45c776fa0e6715d168207 +!! source digest: sha256:0dd822572bebd34c9e428fe8f7cd191012396cd99b1655fa61c5cbd8dd572bf8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

This module was written to mark Odoo’s emails as being autogenerated -according to RFC 3834, section -5. This allows receiving mail servers to act accordingly by for example -not sending a vacation autoreply.

+according to RFC 3834 <https://tools.ietf.org/html/rfc3834>_, +section 5. This allows receiving mail servers to act accordingly by for +example not sending a vacation autoreply.

On the receiving side, this module drops all notifications for autogenerated incoming e-mails.

The combination of both avoids possible mail loops with misconfigured or @@ -398,9 +398,13 @@

Autogenerated headers

Usage

-

There’s nothing the user has to do. Developers can set the context flag +

For sending outgoing emails, users can change the config parameter +mail_autogenerated_header.allow_autogenerated_outgoing to False +to avoid any outgoing emails being marked as autogenerated. For only +avoiding in certain cases, developers can set the context flag mail_autogenerated_header_disable in calls to send_email in -order to suppress adding any headers at all, and override +order to suppress adding any autogenerated headers.

+

For receiving incoming emails, developers can override the method _message_route_process_autoreply to fine tune dropping autogenerated mails per model.

diff --git a/mail_autogenerated_header/tests/test_mail_autogenerated_header.py b/mail_autogenerated_header/tests/test_mail_autogenerated_header.py index 7a03fc3fe..2e6039435 100644 --- a/mail_autogenerated_header/tests/test_mail_autogenerated_header.py +++ b/mail_autogenerated_header/tests/test_mail_autogenerated_header.py @@ -1,6 +1,8 @@ # Copyright 2018 Therp BV # Copyright 2022 Hunki Enterprises BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +import copy + from odoo.tools.mail import generate_tracking_message_id from odoo.addons.base.tests.common import BaseCommon @@ -18,7 +20,7 @@ def setUpClass(cls): "message_id": "message_id", } ) - cls.message = cls.env["ir.mail_server"].build_email( + cls.base_message = cls.env["ir.mail_server"].build_email( [cls.mail.email_from], [cls.mail.email_to], cls.mail.subject, @@ -28,25 +30,29 @@ def setUpClass(cls): def test_sending(self): """Test that sending a mail has the Auto-Submitted header""" + self.message = copy.deepcopy(self.base_message) self.env["ir.mail_server"].send_email(self.message) self.assertEqual(self.message["Auto-Submitted"], "auto-generated") + # Test that the header is not set when the parameter is disabled + self.env["ir.config_parameter"].sudo().set_param( + "mail_autogenerated_header.allow_autogenerated_outgoing", False + ) + self.message = copy.deepcopy(self.base_message) + self.env["ir.mail_server"].send_email(self.message) + self.assertNotIn("Auto-Submitted", self.message) def test_receiving(self): """Test that receiving mails with some auto submitted marker won't cause new notifications being sent""" + self.message = copy.deepcopy(self.base_message) demo_user = self.env.ref("base.user_demo") - self.message.replace_header( - "Message-Id", - generate_tracking_message_id(42), - ) - + self.message.replace_header("Message-Id", generate_tracking_message_id(42)) self.env["mail.notification"].search( [("res_partner_id", "=", demo_user.partner_id.id)] ).unlink() partner_id = self.env["mail.thread"].message_process( - "res.partner", - self.message.as_string(), + "res.partner", self.message.as_string() ) partner = self.env["res.partner"].browse(partner_id) partner.message_subscribe(partner_ids=demo_user.partner_id.ids) @@ -54,8 +60,7 @@ def test_receiving(self): reply["References"] = self.message["Message-Id"] reply.replace_header("Message-Id", "message_id3") thread_id = self.env["mail.thread"].message_process( - "res.partner", - reply.as_string(), + "res.partner", reply.as_string() ) self.assertEqual(thread_id, partner.id) notifications = self.env["mail.notification"].search( @@ -68,8 +73,7 @@ def test_receiving(self): reply.replace_header("Message-Id", "message_id4") reply["Auto-Submitted"] = "auto-generated" thread_id = self.env["mail.thread"].message_process( - "res.partner", - reply.as_string(), + "res.partner", reply.as_string() ) self.assertEqual(thread_id, partner.id) notifications = self.env["mail.notification"].search( diff --git a/mail_tracking/README.rst b/mail_tracking/README.rst index 59ce9d064..c378cae17 100644 --- a/mail_tracking/README.rst +++ b/mail_tracking/README.rst @@ -11,7 +11,7 @@ Email tracking !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:1dcb2ce7cde25d536c483309729542a0a80d35e24af13a43d9903a6284c3955f + !! source digest: sha256:1f1623a6f08afa9507deebf534e7eb24325927d829724858b58a3c9bb5bc2cb4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/mail_tracking/__manifest__.py b/mail_tracking/__manifest__.py index ae9df1252..0ce3008e5 100644 --- a/mail_tracking/__manifest__.py +++ b/mail_tracking/__manifest__.py @@ -7,7 +7,7 @@ { "name": "Email tracking", "summary": "Email tracking system for all mails sent", - "version": "18.0.1.0.5", + "version": "18.0.1.0.6", "category": "Social Network", "website": "https://github.com/OCA/mail", "author": ("Tecnativa, Odoo Community Association (OCA)"), diff --git a/mail_tracking/models/mail_tracking_email.py b/mail_tracking/models/mail_tracking_email.py index e08df78d8..36c1dcde0 100644 --- a/mail_tracking/models/mail_tracking_email.py +++ b/mail_tracking/models/mail_tracking_email.py @@ -231,7 +231,9 @@ def _get_allowed_ids(self, ids): ) ) result = self.env.cr.fetchall() - _, msg_ids, mail_ids, partner_ids = zip(*result, strict=True) + msg_ids, mail_ids, partner_ids = [], [], [] + if result: + _, msg_ids, mail_ids, partner_ids = zip(*result, strict=True) msg_ids = ( self.env["mail.message"] .search([("id", "in", [x for x in msg_ids if x])]) diff --git a/mail_tracking/static/description/index.html b/mail_tracking/static/description/index.html index f55fbf1d0..3000021fa 100644 --- a/mail_tracking/static/description/index.html +++ b/mail_tracking/static/description/index.html @@ -372,7 +372,7 @@

Email tracking

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:1dcb2ce7cde25d536c483309729542a0a80d35e24af13a43d9903a6284c3955f +!! source digest: sha256:1f1623a6f08afa9507deebf534e7eb24325927d829724858b58a3c9bb5bc2cb4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

This module shows email notification tracking status for any messages in