mirror of https://github.com/OCA/social.git
[IMP] mail_autogenerated_header: pre-commit stuff
parent
134ae8fdef
commit
7ffad87048
|
@ -17,22 +17,27 @@ Autogenerated headers
|
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/social/tree/12.0/mail_autogenerated_header
|
||||
:target: https://github.com/OCA/social/tree/17.0/mail_autogenerated_header
|
||||
:alt: OCA/social
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_autogenerated_header
|
||||
:target: https://translation.odoo-community.org/projects/social-17-0/social-17-0-mail_autogenerated_header
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=12.0
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=17.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
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 <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.
|
||||
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 broken email servers on the opposite side.
|
||||
The combination of both avoids possible mail loops with misconfigured or
|
||||
broken email servers on the opposite side.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
|
@ -43,10 +48,10 @@ Usage
|
|||
=====
|
||||
|
||||
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.
|
||||
``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.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
@ -54,7 +59,7 @@ Bug Tracker
|
|||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/social/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/social/issues/new?body=module:%20mail_autogenerated_header%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
`feedback <https://github.com/OCA/social/issues/new?body=module:%20mail_autogenerated_header%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
|
@ -62,18 +67,19 @@ Credits
|
|||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
-------
|
||||
|
||||
* Hunki Enterprises BV
|
||||
* Therp BV
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
------------
|
||||
|
||||
* Holger Brunn <mail@hunki-enterprises.com> (https://hunki-enterprises.com)
|
||||
- Holger Brunn <mail@hunki-enterprises.com>
|
||||
(https://hunki-enterprises.com)
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
-----------
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
|
@ -85,6 +91,6 @@ 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.
|
||||
|
||||
This module is part of the `OCA/social <https://github.com/OCA/social/tree/12.0/mail_autogenerated_header>`_ project on GitHub.
|
||||
This module is part of the `OCA/social <https://github.com/OCA/social/tree/17.0/mail_autogenerated_header>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
|
|
@ -10,6 +10,6 @@
|
|||
"category": "Tools",
|
||||
"summary": "Add headers to Odoo's mails indicating they are autogenerated",
|
||||
"depends": [
|
||||
'mail',
|
||||
"mail",
|
||||
],
|
||||
}
|
||||
|
|
|
@ -5,51 +5,77 @@ from odoo import api, models
|
|||
|
||||
|
||||
class IrMailServer(models.Model):
|
||||
_inherit = 'ir.mail_server'
|
||||
_inherit = "ir.mail_server"
|
||||
|
||||
@api.model
|
||||
def send_email(
|
||||
self, message, mail_server_id=None, smtp_server=None, smtp_port=None,
|
||||
smtp_user=None, smtp_password=None, smtp_encryption=None,
|
||||
smtp_debug=False, smtp_session=None,
|
||||
self,
|
||||
message,
|
||||
mail_server_id=None,
|
||||
smtp_server=None,
|
||||
smtp_port=None,
|
||||
smtp_user=None,
|
||||
smtp_password=None,
|
||||
smtp_encryption=None,
|
||||
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_debug=smtp_debug,
|
||||
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_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'
|
||||
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'
|
||||
message["Auto-Submitted"] = "auto-generated"
|
||||
|
||||
return super(IrMailServer, self).send_email(
|
||||
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_debug=smtp_debug, smtp_session=smtp_session,
|
||||
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_debug=smtp_debug,
|
||||
smtp_session=smtp_session,
|
||||
)
|
||||
|
||||
@api.model
|
||||
def _send_email_set_autogenerated(
|
||||
self, message, mail_server_id=None, smtp_server=None, smtp_port=None,
|
||||
smtp_user=None, smtp_password=None, smtp_encryption=None,
|
||||
smtp_debug=False, smtp_session=None,
|
||||
self,
|
||||
message,
|
||||
mail_server_id=None,
|
||||
smtp_server=None,
|
||||
smtp_port=None,
|
||||
smtp_user=None,
|
||||
smtp_password=None,
|
||||
smtp_encryption=None,
|
||||
smtp_debug=False,
|
||||
smtp_session=None,
|
||||
):
|
||||
"""Determine if some mail should have the autogenerated headers"""
|
||||
|
||||
mail = self.env['mail.mail'].search([
|
||||
('message_id', '=', message['Message-Id']),
|
||||
])
|
||||
mail = self.env["mail.mail"].search(
|
||||
[
|
||||
("message_id", "=", message["Message-Id"]),
|
||||
]
|
||||
)
|
||||
if not mail:
|
||||
return False
|
||||
return mail.subtype_id != self.env.ref('mail.mt_comment')
|
||||
return mail.subtype_id != self.env.ref("mail.mt_comment")
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
# Copyright 2022 Hunki Enterprises BV <https://hunki-enterprises.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
import logging
|
||||
|
||||
from odoo import api, models
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class MailThread(models.AbstractModel):
|
||||
_inherit = 'mail.thread'
|
||||
_inherit = "mail.thread"
|
||||
|
||||
@api.model
|
||||
def message_route_process(self, message, message_dict, routes):
|
||||
|
@ -15,20 +17,24 @@ class MailThread(models.AbstractModel):
|
|||
mails"""
|
||||
if self._message_route_process_autoreply(message, message_dict, routes):
|
||||
_logger.info(
|
||||
'Ignoring email %s from %s because it seems to be an auto '
|
||||
'reply', message.get('Message-ID'), message.get('From'),
|
||||
"Ignoring email %s from %s because it seems to be an auto " "reply",
|
||||
message.get("Message-ID"),
|
||||
message.get("From"),
|
||||
)
|
||||
self = self.with_context(mail_autogenerated_header=message)
|
||||
return super(MailThread, self).message_route_process(
|
||||
message, message_dict, routes,
|
||||
message,
|
||||
message_dict,
|
||||
routes,
|
||||
)
|
||||
|
||||
@api.model
|
||||
def _message_route_process_autoreply(self, message, message_dict, routes):
|
||||
"""Determine if some message is an autoreply"""
|
||||
return (
|
||||
message['Auto-Submitted'] and message['Auto-Submitted'] != 'no' or
|
||||
message['X-Auto-Response-Suppress'] and set(
|
||||
message['X-Auto-Response-Suppress'].split(', ')
|
||||
) & set('AutoReply', 'All')
|
||||
message["Auto-Submitted"]
|
||||
and message["Auto-Submitted"] != "no"
|
||||
or message["X-Auto-Response-Suppress"]
|
||||
and set(message["X-Auto-Response-Suppress"].split(", "))
|
||||
& set("AutoReply", "All")
|
||||
)
|
||||
|
|
|
@ -4,20 +4,28 @@ from odoo import api, models
|
|||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = 'res.partner'
|
||||
_inherit = "res.partner"
|
||||
|
||||
@api.model
|
||||
def _notify(
|
||||
self, message, rdata, record, force_send=False,
|
||||
send_after_commit=True, model_description=False,
|
||||
self,
|
||||
message,
|
||||
rdata,
|
||||
record,
|
||||
force_send=False,
|
||||
send_after_commit=True,
|
||||
model_description=False,
|
||||
mail_auto_delete=True,
|
||||
):
|
||||
"""Inhibit notifications if this is the notification for an incoming
|
||||
autogenerated mail from another system"""
|
||||
if self.env.context.get('mail_autogenerated_header'):
|
||||
if self.env.context.get("mail_autogenerated_header"):
|
||||
return True
|
||||
return super()._notify(
|
||||
message, rdata, record, force_send=force_send,
|
||||
message,
|
||||
rdata,
|
||||
record,
|
||||
force_send=force_send,
|
||||
send_after_commit=send_after_commit,
|
||||
model_description=model_description,
|
||||
mail_auto_delete=mail_auto_delete,
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
|
@ -0,0 +1,2 @@
|
|||
- Holger Brunn \<<mail@hunki-enterprises.com>\>
|
||||
(<https://hunki-enterprises.com>)
|
|
@ -1 +0,0 @@
|
|||
* Holger Brunn <mail@hunki-enterprises.com> (https://hunki-enterprises.com)
|
|
@ -0,0 +1,10 @@
|
|||
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.
|
||||
|
||||
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
|
||||
broken email servers on the opposite side.
|
|
@ -1,5 +0,0 @@
|
|||
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.
|
||||
|
||||
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 broken email servers on the opposite side.
|
|
@ -0,0 +1,5 @@
|
|||
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.
|
|
@ -1,5 +0,0 @@
|
|||
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.
|
|
@ -1,4 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
|
@ -9,10 +8,11 @@
|
|||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
|
@ -275,7 +275,7 @@ pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code .ln { color: gray; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
|
@ -301,7 +301,7 @@ span.option {
|
|||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
|
@ -369,10 +369,15 @@ ul.auto-toc {
|
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:c85cef2766e4f4e18f525f38d82ccee67b9e934eee4ca3cccd9ae68783d11a26
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/social/tree/12.0/mail_autogenerated_header"><img alt="OCA/social" src="https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_autogenerated_header"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=12.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module was written to mark Odoo’s emails as being autogenerated according to <a class="reference external" href="https://tools.ietf.org/html/rfc3834">RFC 3834</a>, section 5. This allows receiving mail servers to act accordingly by for example not sending a vacation autoreply.</p>
|
||||
<p>On the receiving side, this module drops all notifications for autogenerated incoming e-mails.</p>
|
||||
<p>The combination of both avoids possible mail loops with misconfigured or broken email servers on the opposite side.</p>
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/social/tree/17.0/mail_autogenerated_header"><img alt="OCA/social" src="https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/social-17-0/social-17-0-mail_autogenerated_header"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module was written to mark Odoo’s emails as being autogenerated
|
||||
according to <a class="reference external" href="https://tools.ietf.org/html/rfc3834">RFC 3834</a>, section
|
||||
5. This allows receiving mail servers to act accordingly by for example
|
||||
not sending a vacation autoreply.</p>
|
||||
<p>On the receiving side, this module drops all notifications for
|
||||
autogenerated incoming e-mails.</p>
|
||||
<p>The combination of both avoids possible mail loops with misconfigured or
|
||||
broken email servers on the opposite side.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
|
@ -389,17 +394,17 @@ ul.auto-toc {
|
|||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
|
||||
<p>There’s nothing the user has to do. Developers can set the context flag
|
||||
<tt class="docutils literal">mail_autogenerated_header_disable</tt> in calls to <tt class="docutils literal">send_email</tt> in order to
|
||||
suppress adding any headers at all, and override
|
||||
<tt class="docutils literal">_message_route_process_autoreply</tt> to fine tune dropping autogenerated mails
|
||||
per model.</p>
|
||||
<tt class="docutils literal">mail_autogenerated_header_disable</tt> in calls to <tt class="docutils literal">send_email</tt> in
|
||||
order to suppress adding any headers at all, and override
|
||||
<tt class="docutils literal">_message_route_process_autoreply</tt> to fine tune dropping autogenerated
|
||||
mails per model.</p>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/social/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/social/issues/new?body=module:%20mail_autogenerated_header%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<a class="reference external" href="https://github.com/OCA/social/issues/new?body=module:%20mail_autogenerated_header%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
|
@ -414,17 +419,20 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Holger Brunn <<a class="reference external" href="mailto:mail@hunki-enterprises.com">mail@hunki-enterprises.com</a>> (<a class="reference external" href="https://hunki-enterprises.com">https://hunki-enterprises.com</a>)</li>
|
||||
<li>Holger Brunn <<a class="reference external" href="mailto:mail@hunki-enterprises.com">mail@hunki-enterprises.com</a>>
|
||||
(<a class="reference external" href="https://hunki-enterprises.com">https://hunki-enterprises.com</a>)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>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.</p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/social/tree/12.0/mail_autogenerated_header">OCA/social</a> project on GitHub.</p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/social/tree/17.0/mail_autogenerated_header">OCA/social</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -8,56 +8,65 @@ from odoo.tools.mail import generate_tracking_message_id
|
|||
class TestMailAutogeneratedHeader(TransactionCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.mail = self.env['mail.mail'].create({
|
||||
'subject': 'testmessage',
|
||||
'email_from': 'test@test.com',
|
||||
'email_to': 'test@test.com',
|
||||
'message_id': 'message_id',
|
||||
})
|
||||
self.message = self.env['ir.mail_server'].build_email(
|
||||
[self.mail.email_from], [self.mail.email_to], self.mail.subject, '',
|
||||
self.mail = self.env["mail.mail"].create(
|
||||
{
|
||||
"subject": "testmessage",
|
||||
"email_from": "test@test.com",
|
||||
"email_to": "test@test.com",
|
||||
"message_id": "message_id",
|
||||
}
|
||||
)
|
||||
self.message = self.env["ir.mail_server"].build_email(
|
||||
[self.mail.email_from],
|
||||
[self.mail.email_to],
|
||||
self.mail.subject,
|
||||
"",
|
||||
message_id=self.mail.message_id,
|
||||
)
|
||||
|
||||
def test_sending(self):
|
||||
"""Test that sending a mail has the Auto-Submitted header"""
|
||||
self.env['ir.mail_server'].send_email(self.message)
|
||||
self.assertEqual(self.message['Auto-Submitted'], 'auto-generated')
|
||||
self.env["ir.mail_server"].send_email(self.message)
|
||||
self.assertEqual(self.message["Auto-Submitted"], "auto-generated")
|
||||
|
||||
def test_receiving(self):
|
||||
"""Test that receiving mails with some auto submitted marker won't
|
||||
cause new notifications being sent"""
|
||||
demo_user = self.env.ref('base.user_demo')
|
||||
demo_user = self.env.ref("base.user_demo")
|
||||
self.message.replace_header(
|
||||
'Message-Id', generate_tracking_message_id(42),
|
||||
"Message-Id",
|
||||
generate_tracking_message_id(42),
|
||||
)
|
||||
partner_id = self.env['mail.thread'].message_process(
|
||||
'res.partner', self.message.as_string(),
|
||||
partner_id = self.env["mail.thread"].message_process(
|
||||
"res.partner",
|
||||
self.message.as_string(),
|
||||
)
|
||||
partner = self.env['res.partner'].browse(partner_id)
|
||||
partner = self.env["res.partner"].browse(partner_id)
|
||||
partner.message_subscribe(partner_ids=demo_user.partner_id.ids)
|
||||
reply = self.message
|
||||
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(),
|
||||
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(),
|
||||
)
|
||||
self.assertEqual(thread_id, partner.id)
|
||||
notifications = self.env['mail.notification'].search([
|
||||
('res_partner_id', '=', demo_user.partner_id.id)
|
||||
])
|
||||
notifications = self.env["mail.notification"].search(
|
||||
[("res_partner_id", "=", demo_user.partner_id.id)]
|
||||
)
|
||||
# mail is not autogenerated, should have generated mails
|
||||
self.assertTrue(notifications.is_email)
|
||||
notifications.unlink()
|
||||
|
||||
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(),
|
||||
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(),
|
||||
)
|
||||
self.assertEqual(thread_id, partner.id)
|
||||
notifications = self.env['mail.notification'].search([
|
||||
('res_partner_id', '=', demo_user.partner_id.id)
|
||||
])
|
||||
notifications = self.env["mail.notification"].search(
|
||||
[("res_partner_id", "=", demo_user.partner_id.id)]
|
||||
)
|
||||
# mail is autogenerated, shouldn't have generated mails
|
||||
self.assertFalse(notifications.is_email)
|
||||
|
|
Loading…
Reference in New Issue