Mail Group

mail_group
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/mail_group
VERSION
VERSION 1.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Géry Debongnie, qsm-odoo, Julien Castiaux, Alvaro Fuentes, std-odoo, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Renaud Thiry, Victor Piryns (pivi), Dylan Kiss (dyki), adsh-odoo, Sébastien (blse), Anton Romanova (roan), Krzysztof Magusiak (krma), saurabh, alan-odoo, panj-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Manage your mailing lists from Odoo.
    

Code Analysis

Views touched (26)
XML IDNameModelTypeStatus
confirmation_subscription Mailing List Confirmation ir.ui.view qweb New
email_template_mail_group_closed email_template_mail_group_closed ir.ui.view qweb New
group_archive_menu group_archive_menu ir.ui.view qweb New
group_message group_message ir.ui.view qweb New
group_messages Message Threads ir.ui.view qweb New
group_name group_name ir.ui.view qweb New
invalid_token_subscription Invalid Token Submitted ir.ui.view qweb New
mail_group_footer Mail Group: Footer ir.ui.view qweb New
mail_group_member_view_search mail.group.member.view.search mail.group.member search New
mail_group_member_view_tree mail.group.member.view.list mail.group.member list New
mail_group_message_reject_form mail.group.message.reject.form mail.group.message.reject form New
mail_group_message_view_form mail.group.message.view.form mail.group.message form New
mail_group_message_view_list mail.group.message.view.list mail.group.message list New
mail_group_message_view_search mail.group.message.view.search mail.group.message search New
mail_group_moderation_view_search mail.group.moderation.view.search mail.group.moderation search New
mail_group_moderation_view_tree mail.group.moderation.view.list mail.group.moderation list New
mail_group_notify_moderation mail_group_notify_moderation ir.ui.view qweb New
mail_group_view_form mail.group.view.form mail.group form New
mail_group_view_kanban mail.group.view.kanban mail.group kanban New
mail_group_view_list mail.group.view.list mail.group list New
mail_group_view_search mail.group.view.search mail.group search New
mail_groups Mailing Lists ir.ui.view qweb New
message_attachments message_attachments ir.ui.view qweb New
message_footer Message Footer ir.ui.view qweb New
messages_short messages_short ir.ui.view qweb New
portal_breadcrumbs_group Portal layout : mail group menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
Models touched (5)

New fields (25)
  • access_group_id Many2one → res.groups
    default=<expr> string='Authorized Group' args: 'res.groups'
  • access_mode Selection
    default='public' required=True string='Privacy' args: [('public', 'Everyone'), ('members', 'Members only'), ('groups', 'Selected group of users')]
  • active Boolean
    default=True args: 'Active'
  • can_manage_group Boolean
    compute='_compute_can_manage_group' help='Can manage the members' args: 'Can Manage'
  • description Text
    args: 'Description'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • is_closed Boolean
    copy=False help='Closed groups might still be accessed, but emails sent to it will bounce' args: 'Is Closed'
  • is_member Boolean
    compute='_compute_is_member' args: 'Is Member'
  • is_moderator Boolean
    compute='_compute_is_moderator' help='Current user is a moderator of the group' string='Moderator'
  • mail_group_message_count Integer
    compute='_compute_mail_group_message_count' help='Number of message in this group' args: 'Messages Count'
  • mail_group_message_ids One2many → mail.group.message
    string='Pending Messages' args: 'mail.group.message', 'mail_group_id'
  • mail_group_message_last_month_count Integer
    compute='_compute_mail_group_message_last_month_count' args: 'Messages Per Month'
  • mail_group_message_moderation_count Integer
    compute='_compute_mail_group_message_moderation_count' help='Messages that need an action' args: 'Pending Messages Count'
  • member_count Integer
    compute='_compute_member_count' args: 'Members Count'
  • member_ids One2many → mail.group.member
    string='Members' args: 'mail.group.member', 'mail_group_id'
  • member_partner_ids Many2many → res.partner
    compute='_compute_member_partner_ids' search='_search_member_partner_ids' string='Partners Member' args: 'res.partner'
  • moderation Boolean
    string='Moderate'
  • moderation_guidelines Boolean
    help='Newcomers on this moderated group will automatically receive the guidelines.' string='Send guidelines to new members'
  • moderation_guidelines_msg Html
    string='Guidelines'
  • moderation_notify Boolean
    help='People receive an automatic notification about their message being waiting for moderation.' string='Automatic notification'
  • moderation_notify_msg Html
    string='Notification message'
  • moderation_rule_count Integer
    compute='_compute_moderation_rule_count' string='Moderated emails count'
  • moderation_rule_ids One2many → mail.group.moderation
    string='Moderated Emails' args: 'mail.group.moderation', 'mail_group_id'
  • moderator_ids Many2many → res.users
    domain=<expr> string='Moderators' args: 'res.users', 'mail_group_moderator_rel'
  • name Char
    required=True translate=True args: 'Name'
Public methods (9)
  • action_close(self)
  • action_join(self)
  • action_leave(self)
  • action_open(self)
  • action_send_guidelines(self, members=None)
    Send guidelines to given members.
  • default_get(self, fields)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.
  • message_post(self, body='', subject=None, email_from=None, author_id=None, **kwargs)
    Custom posting process. This model does not inherit from ``mail.thread`` but uses the mail gateway so few methods should be defined. This custom posting process works as follow * create a ``mail.message`` based on incoming email; * create linked ``mail.group.message`` that encapsulates message in a format used in mail groups; * apply moderation rules; :returns: newly-created mail.message
  • message_update(self, msg_dict, update_vals=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.

New fields (4)
  • email Char
    compute='_compute_email' readonly=False store=True string='Email'
  • email_normalized Char
    compute='_compute_email_normalized' index=True store=True string='Normalized Email'
  • mail_group_id Many2one → mail.group
    index=True ondelete='cascade' required=True string='Group' args: 'mail.group'
  • partner_id Many2one → res.partner
    ondelete='cascade' args: 'res.partner', 'Partner'
Public methods (0)

No public methods.

New fields (15)
  • attachment_ids Many2many
    readonly=False related='mail_message_id.attachment_ids'
  • author_id Many2one
    readonly=False related='mail_message_id.author_id'
  • author_moderation Selection
    compute='_compute_author_moderation' string='Author Moderation Status' args: [('ban', 'Banned'), ('allow', 'Whitelisted')]
  • body Html
    readonly=False related='mail_message_id.body'
  • create_date Datetime
    string='Posted'
  • email_from Char
    readonly=False related='mail_message_id.email_from'
  • email_from_normalized Char
    compute='_compute_email_from_normalized' store=True args: 'Normalized From'
  • group_message_child_ids One2many → mail.group.message
    string='Children' args: 'mail.group.message', 'group_message_parent_id'
  • group_message_parent_id Many2one → mail.group.message
    index=True store=True string='Parent' args: 'mail.group.message'
  • is_group_moderated Boolean
    related='mail_group_id.moderation' args: 'Is Group Moderated'
  • mail_group_id Many2one → mail.group
    index=True ondelete='cascade' required=True string='Group' args: 'mail.group'
  • mail_message_id Many2one → mail.message
    copy=False index=True ondelete='cascade' required=True args: 'mail.message', 'Mail Message'
  • moderation_status Selection
    copy=False default='pending_moderation' index=True required=True string='Status' args: [('pending_moderation', 'Pending Moderation'), ('accepted', 'Accepted'), ('rejected', 'Rejected')]
  • moderator_id Many2one → res.users
    string='Moderated By' args: 'res.users'
  • subject Char
    readonly=False related='mail_message_id.subject'
Public methods (8)
  • action_moderate_accept(self)
    Accept the incoming email. Will send the incoming email to all members of the group.
  • action_moderate_allow(self)
  • action_moderate_ban(self)
  • action_moderate_ban_with_comment(self, ban_subject, ban_comment)
  • action_moderate_reject(self)
  • action_moderate_reject_with_comment(self, reject_subject, reject_comment)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi

New fields (6)
  • action Selection
    required=True string='Action' args: [('reject', 'Reject'), ('ban', 'Ban')]
  • body Html
    default='' sanitize_style=True args: 'Contents'
  • email_from_normalized Char
    related='mail_group_message_id.email_from_normalized' args: 'Email From'
  • mail_group_message_id Many2one → mail.group.message
    readonly=True required=True string='Message' args: 'mail.group.message'
  • send_email Boolean
    compute='_compute_send_email' help='Send an email to the author of the message' args: 'Send Email'
  • subject Char
    compute='_compute_subject' readonly=False store=True args: 'Subject'
Public methods (1)
  • action_send_mail(self)

New fields (3)
  • email Char
    required=True string='Email'
  • mail_group_id Many2one → mail.group
    index=True ondelete='cascade' required=True string='Group' args: 'mail.group'
  • status Selection
    default='ban' required=True string='Status' args: [('allow', 'Always Allow'), ('ban', 'Permanent Ban')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/mail_group
VERSION
VERSION 1.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Xavier Morel, Géry Debongnie, Aaron Bohy, Jeremy Kersten, Odoo Online, Alvaro Fuentes, Tiffany Chang (tic), Gorash, Vincent Larcin, Dylan Kiss (dyki), Nguyễn Đại Dương, Noe Antoine, omra-odoo, Andrzej(pian), Tanguy Quéguineur, aath-odoo, sami odoo, Louis (wil), saurabh
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Manage your mailing lists from Odoo.
    

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
confirmation_subscription Mailing List Confirmation ir.ui.view qweb New
group_archive_menu group_archive_menu ir.ui.view qweb New
group_message group_message ir.ui.view qweb New
group_messages Message Threads ir.ui.view qweb New
group_name group_name ir.ui.view qweb New
invalid_token_subscription Invalid Token Submitted ir.ui.view qweb New
mail_group_footer Mail Group: Footer ir.ui.view qweb New
mail_group_member_view_search mail.group.member.view.search mail.group.member search New
mail_group_member_view_tree mail.group.member.view.list mail.group.member list New
mail_group_message_reject_form mail.group.message.reject.form mail.group.message.reject form New
mail_group_message_view_form mail.group.message.view.form mail.group.message form New
mail_group_message_view_list mail.group.message.view.list mail.group.message list New
mail_group_message_view_search mail.group.message.view.search mail.group.message search New
mail_group_moderation_view_search mail.group.moderation.view.search mail.group.moderation search New
mail_group_moderation_view_tree mail.group.moderation.view.list mail.group.moderation list New
mail_group_notify_moderation mail_group_notify_moderation ir.ui.view qweb New
mail_group_view_form mail.group.view.form mail.group form New
mail_group_view_kanban mail.group.view.kanban mail.group kanban New
mail_group_view_list mail.group.view.list mail.group list New
mail_group_view_search mail.group.view.search mail.group search New
mail_groups Mailing Lists ir.ui.view qweb New
message_attachments message_attachments ir.ui.view qweb New
message_footer Message Footer ir.ui.view qweb New
messages_short messages_short ir.ui.view qweb New
portal_breadcrumbs_group Portal layout : mail group menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
Models touched (5)

New fields (24)
  • access_group_id Many2one → res.groups
    default=<expr> string='Authorized Group' args: 'res.groups'
  • access_mode Selection
    default='public' required=True string='Privacy' args: [('public', 'Everyone'), ('members', 'Members only'), ('groups', 'Selected group of users')]
  • active Boolean
    default=True args: 'Active'
  • can_manage_group Boolean
    compute='_compute_can_manage_group' help='Can manage the members' args: 'Can Manage'
  • description Text
    args: 'Description'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • is_member Boolean
    compute='_compute_is_member' args: 'Is Member'
  • is_moderator Boolean
    compute='_compute_is_moderator' help='Current user is a moderator of the group' string='Moderator'
  • mail_group_message_count Integer
    compute='_compute_mail_group_message_count' help='Number of message in this group' args: 'Messages Count'
  • mail_group_message_ids One2many → mail.group.message
    string='Pending Messages' args: 'mail.group.message', 'mail_group_id'
  • mail_group_message_last_month_count Integer
    compute='_compute_mail_group_message_last_month_count' args: 'Messages Per Month'
  • mail_group_message_moderation_count Integer
    compute='_compute_mail_group_message_moderation_count' help='Messages that need an action' args: 'Pending Messages Count'
  • member_count Integer
    compute='_compute_member_count' args: 'Members Count'
  • member_ids One2many → mail.group.member
    string='Members' args: 'mail.group.member', 'mail_group_id'
  • member_partner_ids Many2many → res.partner
    compute='_compute_member_partner_ids' search='_search_member_partner_ids' string='Partners Member' args: 'res.partner'
  • moderation Boolean
    string='Moderate this group'
  • moderation_guidelines Boolean
    help='Newcomers on this moderated group will automatically receive the guidelines.' string='Send guidelines to new subscribers'
  • moderation_guidelines_msg Html
    string='Guidelines'
  • moderation_notify Boolean
    help='People receive an automatic notification about their message being waiting for moderation.' string='Automatic notification'
  • moderation_notify_msg Html
    string='Notification message'
  • moderation_rule_count Integer
    compute='_compute_moderation_rule_count' string='Moderated emails count'
  • moderation_rule_ids One2many → mail.group.moderation
    string='Moderated Emails' args: 'mail.group.moderation', 'mail_group_id'
  • moderator_ids Many2many → res.users
    domain=<expr> string='Moderators' args: 'res.users', 'mail_group_moderator_rel'
  • name Char
    required=True translate=True args: 'Name'
Public methods (7)
  • action_join(self)
  • action_leave(self)
  • action_send_guidelines(self, members=None)
    Send guidelines to given members.
  • default_get(self, fields)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.
  • message_post(self, body='', subject=None, email_from=None, author_id=None, **kwargs)
    @api.returns('mail.message', <expr>)
    Custom posting process. This model does not inherit from ``mail.thread`` but uses the mail gateway so few methods should be defined. This custom posting process works as follow * create a ``mail.message`` based on incoming email; * create linked ``mail.group.message`` that encapsulates message in a format used in mail groups; * apply moderation rules; :return message: newly-created mail.message
  • message_update(self, msg_dict, update_vals=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.

New fields (4)
  • email Char
    compute='_compute_email' readonly=False store=True string='Email'
  • email_normalized Char
    compute='_compute_email_normalized' index=True store=True string='Normalized Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • partner_id Many2one → res.partner
    ondelete='cascade' args: 'res.partner', 'Partner'
Public methods (0)

No public methods.

New fields (15)
  • attachment_ids Many2many
    readonly=False related='mail_message_id.attachment_ids'
  • author_id Many2one
    readonly=False related='mail_message_id.author_id'
  • author_moderation Selection
    compute='_compute_author_moderation' string='Author Moderation Status' args: [('ban', 'Banned'), ('allow', 'Whitelisted')]
  • body Html
    readonly=False related='mail_message_id.body'
  • create_date Datetime
    string='Posted'
  • email_from Char
    readonly=False related='mail_message_id.email_from'
  • email_from_normalized Char
    compute='_compute_email_from_normalized' store=True args: 'Normalized From'
  • group_message_child_ids One2many → mail.group.message
    string='Children' args: 'mail.group.message', 'group_message_parent_id'
  • group_message_parent_id Many2one → mail.group.message
    store=True string='Parent' args: 'mail.group.message'
  • is_group_moderated Boolean
    related='mail_group_id.moderation' args: 'Is Group Moderated'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • mail_message_id Many2one → mail.message
    copy=False index=True ondelete='cascade' required=True args: 'mail.message', 'Mail Message'
  • moderation_status Selection
    copy=False default='pending_moderation' index=True required=True string='Status' args: [('pending_moderation', 'Pending Moderation'), ('accepted', 'Accepted'), ('rejected', 'Rejected')]
  • moderator_id Many2one → res.users
    string='Moderated By' args: 'res.users'
  • subject Char
    readonly=False related='mail_message_id.subject'
Public methods (8)
  • action_moderate_accept(self)
    Accept the incoming email. Will send the incoming email to all members of the group.
  • action_moderate_allow(self)
  • action_moderate_ban(self)
  • action_moderate_ban_with_comment(self, ban_subject, ban_comment)
  • action_moderate_reject(self)
  • action_moderate_reject_with_comment(self, reject_subject, reject_comment)
  • copy_data(self, default=None)
  • create(self, values_list)
    @api.model_create_multi

New fields (6)
  • action Selection
    required=True string='Action' args: [('reject', 'Reject'), ('ban', 'Ban')]
  • body Html
    default='' sanitize_style=True args: 'Contents'
  • email_from_normalized Char
    related='mail_group_message_id.email_from_normalized' args: 'Email From'
  • mail_group_message_id Many2one → mail.group.message
    readonly=True required=True string='Message' args: 'mail.group.message'
  • send_email Boolean
    compute='_compute_send_email' help='Send an email to the author of the message' args: 'Send Email'
  • subject Char
    compute='_compute_subject' readonly=False store=True args: 'Subject'
Public methods (1)
  • action_send_mail(self)

New fields (3)
  • email Char
    required=True string='Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • status Selection
    default='ban' required=True string='Status' args: [('allow', 'Always Allow'), ('ban', 'Permanent Ban')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/mail_group
VERSION
VERSION 1.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Xavier ALT, Aaron Bohy, Jeremy Kersten, Damien Bouvy, qsm-odoo, Odoo Online, Victor Feyens, Samuel Degueldre, Alvaro Fuentes, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, Louis Wicket (wil), Pierre-Yves Dufays, Dylan Kiss (dyki), Michael (mcm), Nguyễn Đại Dương, Andrzej(pian), Tanguy Quéguineur, aath-odoo, Louis (wil), Pierre Pulinckx (pipu), Bastien PIERRE
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Manage your mailing lists from Odoo.
    

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
confirmation_subscription Mailing List Confirmation ir.ui.view qweb New
group_archive_menu group_archive_menu ir.ui.view qweb New
group_message group_message ir.ui.view qweb New
group_messages Message Threads ir.ui.view qweb New
group_name group_name ir.ui.view qweb New
invalid_token_subscription Invalid Token Submitted ir.ui.view qweb New
mail_group_footer Mail Group: Footer ir.ui.view qweb New
mail_group_member_view_search mail.group.member.view.search mail.group.member search New
mail_group_member_view_tree mail.group.member.view.tree mail.group.member tree New
mail_group_message_reject_form mail.group.message.reject.form mail.group.message.reject form New
mail_group_message_view_form mail.group.message.view.form mail.group.message form New
mail_group_message_view_list mail.group.message.view.list mail.group.message tree New
mail_group_message_view_search mail.group.message.view.search mail.group.message search New
mail_group_moderation_view_search mail.group.moderation.view.search mail.group.moderation search New
mail_group_moderation_view_tree mail.group.moderation.view.tree mail.group.moderation tree New
mail_group_notify_moderation mail_group_notify_moderation ir.ui.view qweb New
mail_group_view_form mail.group.view.form mail.group form New
mail_group_view_kanban mail.group.view.kanban mail.group kanban New
mail_group_view_list mail.group.view.list mail.group tree New
mail_group_view_search mail.group.view.search mail.group search New
mail_groups Mailing Lists ir.ui.view qweb New
message_attachments message_attachments ir.ui.view qweb New
message_footer Message Footer ir.ui.view qweb New
messages_short messages_short ir.ui.view qweb New
portal_breadcrumbs_group Portal layout : mail group menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
Models touched (5)

New fields (24)
  • access_group_id Many2one → res.groups
    default=<expr> string='Authorized Group' args: 'res.groups'
  • access_mode Selection
    default='public' required=True string='Privacy' args: [('public', 'Everyone'), ('members', 'Members only'), ('groups', 'Selected group of users')]
  • active Boolean
    default=True args: 'Active'
  • can_manage_group Boolean
    compute='_compute_can_manage_group' help='Can manage the members' args: 'Can Manage'
  • description Text
    args: 'Description'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • is_member Boolean
    compute='_compute_is_member' args: 'Is Member'
  • is_moderator Boolean
    compute='_compute_is_moderator' help='Current user is a moderator of the group' string='Moderator'
  • mail_group_message_count Integer
    compute='_compute_mail_group_message_count' help='Number of message in this group' args: 'Messages Count'
  • mail_group_message_ids One2many → mail.group.message
    string='Pending Messages' args: 'mail.group.message', 'mail_group_id'
  • mail_group_message_last_month_count Integer
    compute='_compute_mail_group_message_last_month_count' args: 'Messages Per Month'
  • mail_group_message_moderation_count Integer
    compute='_compute_mail_group_message_moderation_count' help='Messages that need an action' args: 'Pending Messages Count'
  • member_count Integer
    compute='_compute_member_count' args: 'Members Count'
  • member_ids One2many → mail.group.member
    string='Members' args: 'mail.group.member', 'mail_group_id'
  • member_partner_ids Many2many → res.partner
    compute='_compute_member_partner_ids' search='_search_member_partner_ids' string='Partners Member' args: 'res.partner'
  • moderation Boolean
    string='Moderate this group'
  • moderation_guidelines Boolean
    help='Newcomers on this moderated group will automatically receive the guidelines.' string='Send guidelines to new subscribers'
  • moderation_guidelines_msg Html
    string='Guidelines'
  • moderation_notify Boolean
    help='People receive an automatic notification about their message being waiting for moderation.' string='Automatic notification'
  • moderation_notify_msg Html
    string='Notification message'
  • moderation_rule_count Integer
    compute='_compute_moderation_rule_count' string='Moderated emails count'
  • moderation_rule_ids One2many → mail.group.moderation
    string='Moderated Emails' args: 'mail.group.moderation', 'mail_group_id'
  • moderator_ids Many2many → res.users
    domain=<expr> string='Moderators' args: 'res.users', 'mail_group_moderator_rel'
  • name Char
    required=True translate=True args: 'Name'
Public methods (7)
  • action_join(self)
  • action_leave(self)
  • action_send_guidelines(self, members=None)
    Send guidelines to given members.
  • default_get(self, fields)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.
  • message_post(self, body='', subject=None, email_from=None, author_id=None, **kwargs)
    @api.returns('mail.message', <expr>)
    Custom posting process. This model does not inherit from ``mail.thread`` but uses the mail gateway so few methods should be defined. This custom posting process works as follow * create a ``mail.message`` based on incoming email; * create linked ``mail.group.message`` that encapsulates message in a format used in mail groups; * apply moderation rules; :return message: newly-created mail.message
  • message_update(self, msg_dict, update_vals=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.

New fields (4)
  • email Char
    compute='_compute_email' readonly=False store=True string='Email'
  • email_normalized Char
    compute='_compute_email_normalized' index=True store=True string='Normalized Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • partner_id Many2one → res.partner
    ondelete='cascade' args: 'res.partner', 'Partner'
Public methods (0)

No public methods.

New fields (15)
  • attachment_ids Many2many
    readonly=False related='mail_message_id.attachment_ids'
  • author_id Many2one
    readonly=False related='mail_message_id.author_id'
  • author_moderation Selection
    compute='_compute_author_moderation' string='Author Moderation Status' args: [('ban', 'Banned'), ('allow', 'Whitelisted')]
  • body Html
    readonly=False related='mail_message_id.body'
  • create_date Datetime
    string='Posted'
  • email_from Char
    readonly=False related='mail_message_id.email_from'
  • email_from_normalized Char
    compute='_compute_email_from_normalized' store=True args: 'Normalized From'
  • group_message_child_ids One2many → mail.group.message
    string='Children' args: 'mail.group.message', 'group_message_parent_id'
  • group_message_parent_id Many2one → mail.group.message
    store=True string='Parent' args: 'mail.group.message'
  • is_group_moderated Boolean
    related='mail_group_id.moderation' args: 'Is Group Moderated'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • mail_message_id Many2one → mail.message
    copy=False index=True ondelete='cascade' required=True args: 'mail.message', 'Mail Message'
  • moderation_status Selection
    copy=False default='pending_moderation' index=True required=True string='Status' args: [('pending_moderation', 'Pending Moderation'), ('accepted', 'Accepted'), ('rejected', 'Rejected')]
  • moderator_id Many2one → res.users
    string='Moderated By' args: 'res.users'
  • subject Char
    readonly=False related='mail_message_id.subject'
Public methods (8)
  • action_moderate_accept(self)
    Accept the incoming email. Will send the incoming email to all members of the group.
  • action_moderate_allow(self)
  • action_moderate_ban(self)
  • action_moderate_ban_with_comment(self, ban_subject, ban_comment)
  • action_moderate_reject(self)
  • action_moderate_reject_with_comment(self, reject_subject, reject_comment)
  • copy(self, default=None)
  • create(self, values_list)
    @api.model_create_multi

New fields (6)
  • action Selection
    required=True string='Action' args: [('reject', 'Reject'), ('ban', 'Ban')]
  • body Html
    default='' sanitize_style=True args: 'Contents'
  • email_from_normalized Char
    related='mail_group_message_id.email_from_normalized' args: 'Email From'
  • mail_group_message_id Many2one → mail.group.message
    readonly=True required=True string='Message' args: 'mail.group.message'
  • send_email Boolean
    compute='_compute_send_email' help='Send an email to the author of the message' args: 'Send Email'
  • subject Char
    compute='_compute_subject' readonly=False store=True args: 'Subject'
Public methods (1)
  • action_send_mail(self)

New fields (3)
  • email Char
    required=True string='Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • status Selection
    default='ban' required=True string='Status' args: [('allow', 'Always Allow'), ('ban', 'Permanent Ban')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/mail_group
VERSION
VERSION 1.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Jeremy Kersten, Damien Bouvy, Romeo Fragomeli, Victor Feyens, Alvaro Fuentes, std-odoo, Tiffany Chang (tic), Csaba Tóth, Fabio Barbero, Andrzej(pian), Tanguy Quéguineur, aath-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        Manage your mailing lists from Odoo.
    

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
confirmation_subscription Mailing List Confirmation ir.ui.view qweb New
group_archive_menu group_archive_menu ir.ui.view qweb New
group_message group_message ir.ui.view qweb New
group_messages Message Threads ir.ui.view qweb New
group_name group_name ir.ui.view qweb New
invalid_token_subscription Invalid Token Submitted ir.ui.view qweb New
mail_group_footer Mail Group: Footer ir.ui.view qweb New
mail_group_member_view_search mail.group.member.view.search mail.group.member search New
mail_group_member_view_tree mail.group.member.view.tree mail.group.member tree New
mail_group_message_reject_form mail.group.message.reject.form mail.group.message.reject form New
mail_group_message_view_form mail.group.message.view.form mail.group.message form New
mail_group_message_view_list mail.group.message.view.list mail.group.message tree New
mail_group_message_view_search mail.group.message.view.search mail.group.message search New
mail_group_moderation_view_search mail.group.moderation.view.search mail.group.moderation search New
mail_group_moderation_view_tree mail.group.moderation.view.tree mail.group.moderation tree New
mail_group_notify_moderation mail_group_notify_moderation ir.ui.view qweb New
mail_group_view_form mail.group.view.form mail.group form New
mail_group_view_kanban mail.group.view.kanban mail.group kanban New
mail_group_view_list mail.group.view.list mail.group tree New
mail_group_view_search mail.group.view.search mail.group search New
mail_groups Mailing Lists ir.ui.view qweb New
message_attachments message_attachments ir.ui.view qweb New
message_footer Message Footer ir.ui.view qweb New
messages_short messages_short ir.ui.view qweb New
portal_breadcrumbs_group Portal layout : mail group menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
Models touched (5)

New fields (26)
  • access_group_id Many2one → res.groups
    default=<expr> string='Authorized Group' args: 'res.groups'
  • access_mode Selection
    default='public' required=True string='Privacy' args: [('public', 'Everyone'), ('members', 'Members only'), ('groups', 'Selected group of users')]
  • active Boolean
    default=True args: 'Active'
  • alias_fullname Char
    compute='_compute_alias_fullname' args: 'Alias Full Name'
  • alias_name Char
    copy=False readonly=False related='alias_id.alias_name' args: 'Alias Name'
  • can_manage_group Boolean
    compute='_compute_can_manage_group' help='Can manage the members' args: 'Can Manage'
  • description Text
    args: 'Description'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • is_member Boolean
    compute='_compute_is_member' args: 'Is Member'
  • is_moderator Boolean
    compute='_compute_is_moderator' help='Current user is a moderator of the group' string='Moderator'
  • mail_group_message_count Integer
    compute='_compute_mail_group_message_count' help='Number of message in this group' args: 'Messages Count'
  • mail_group_message_ids One2many → mail.group.message
    string='Pending Messages' args: 'mail.group.message', 'mail_group_id'
  • mail_group_message_last_month_count Integer
    compute='_compute_mail_group_message_last_month_count' args: 'Messages Per Month'
  • mail_group_message_moderation_count Integer
    compute='_compute_mail_group_message_moderation_count' help='Messages that need an action' args: 'Pending Messages Count'
  • member_count Integer
    compute='_compute_member_count' args: 'Members Count'
  • member_ids One2many → mail.group.member
    string='Members' args: 'mail.group.member', 'mail_group_id'
  • member_partner_ids Many2many → res.partner
    compute='_compute_member_partner_ids' search='_search_member_partner_ids' string='Partners Member' args: 'res.partner'
  • moderation Boolean
    string='Moderate this group'
  • moderation_guidelines Boolean
    help='Newcomers on this moderated group will automatically receive the guidelines.' string='Send guidelines to new subscribers'
  • moderation_guidelines_msg Html
    string='Guidelines'
  • moderation_notify Boolean
    help='People receive an automatic notification about their message being waiting for moderation.' string='Automatic notification'
  • moderation_notify_msg Html
    string='Notification message'
  • moderation_rule_count Integer
    compute='_compute_moderation_rule_count' string='Moderated emails count'
  • moderation_rule_ids One2many → mail.group.moderation
    string='Moderated Emails' args: 'mail.group.moderation', 'mail_group_id'
  • moderator_ids Many2many → res.users
    domain=<expr> string='Moderators' args: 'res.users', 'mail_group_moderator_rel'
  • name Char
    required=True translate=True args: 'Name'
Public methods (7)
  • action_join(self)
  • action_leave(self)
  • action_send_guidelines(self, members=None)
    Send guidelines to given members.
  • default_get(self, fields)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.
  • message_post(self, body='', subject=None, email_from=None, author_id=None, **kwargs)
    @api.returns('mail.message', <expr>)
    Custom posting process. This model does not inherit from ``mail.thread`` but uses the mail gateway so few methods should be defined. This custom posting process works as follow * create a ``mail.message`` based on incoming email; * create linked ``mail.group.message`` that encapsulates message in a format used in mail groups; * apply moderation rules; :return message: newly-created mail.message
  • message_update(self, msg_dict, update_vals=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.

New fields (4)
  • email Char
    compute='_compute_email' readonly=False store=True string='Email'
  • email_normalized Char
    compute='_compute_email_normalized' index=True store=True string='Normalized Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • partner_id Many2one → res.partner
    ondelete='cascade' args: 'res.partner', 'Partner'
Public methods (0)

No public methods.

New fields (15)
  • attachment_ids Many2many
    readonly=False related='mail_message_id.attachment_ids'
  • author_id Many2one
    readonly=False related='mail_message_id.author_id'
  • author_moderation Selection
    compute='_compute_author_moderation' string='Author Moderation Status' args: [('ban', 'Banned'), ('allow', 'Whitelisted')]
  • body Html
    readonly=False related='mail_message_id.body'
  • create_date Datetime
    string='Posted'
  • email_from Char
    readonly=False related='mail_message_id.email_from'
  • email_from_normalized Char
    compute='_compute_email_from_normalized' store=True args: 'Normalized From'
  • group_message_child_ids One2many → mail.group.message
    string='Children' args: 'mail.group.message', 'group_message_parent_id'
  • group_message_parent_id Many2one → mail.group.message
    store=True string='Parent' args: 'mail.group.message'
  • is_group_moderated Boolean
    related='mail_group_id.moderation' args: 'Is Group Moderated'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • mail_message_id Many2one → mail.message
    copy=False index=True ondelete='cascade' required=True args: 'mail.message', 'Mail Message'
  • moderation_status Selection
    copy=False default='pending_moderation' index=True required=True string='Status' args: [('pending_moderation', 'Pending Moderation'), ('accepted', 'Accepted'), ('rejected', 'Rejected')]
  • moderator_id Many2one → res.users
    string='Moderated By' args: 'res.users'
  • subject Char
    readonly=False related='mail_message_id.subject'
Public methods (8)
  • action_moderate_accept(self)
    Accept the incoming email. Will send the incoming email to all members of the group.
  • action_moderate_allow(self)
  • action_moderate_ban(self)
  • action_moderate_ban_with_comment(self, ban_subject, ban_comment)
  • action_moderate_reject(self)
  • action_moderate_reject_with_comment(self, reject_subject, reject_comment)
  • copy(self, default=None)
  • create(self, values_list)
    @api.model_create_multi

New fields (6)
  • action Selection
    required=True string='Action' args: [('reject', 'Reject'), ('ban', 'Ban')]
  • body Html
    default='' sanitize_style=True args: 'Contents'
  • email_from_normalized Char
    related='mail_group_message_id.email_from_normalized' args: 'Email From'
  • mail_group_message_id Many2one → mail.group.message
    readonly=True required=True string='Message' args: 'mail.group.message'
  • send_email Boolean
    compute='_compute_send_email' help='Send an email to the author of the message' args: 'Send Email'
  • subject Char
    compute='_compute_subject' readonly=False store=True args: 'Subject'
Public methods (1)
  • action_send_mail(self)

New fields (3)
  • email Char
    required=True string='Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • status Selection
    default='ban' required=True string='Status' args: [('allow', 'Always Allow'), ('ban', 'Permanent Ban')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/mail_group
VERSION
VERSION 1.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Jeremy Kersten, Xavier-Do, std-odoo, Tiffany Chang (tic), Csaba Tóth, Nicolas Bayet, Andrzej(pian), Tanguy Quéguineur
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        Manage your mailing lists from Odoo.
    

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
confirmation_subscription Mailing List Confirmation ir.ui.view qweb New
group_archive_menu group_archive_menu ir.ui.view qweb New
group_message group_message ir.ui.view qweb New
group_messages Message Threads ir.ui.view qweb New
group_name group_name ir.ui.view qweb New
invalid_token_subscription Invalid Token Submitted ir.ui.view qweb New
mail_group_footer Mail Group: Footer ir.ui.view qweb New
mail_group_member_view_search mail.group.member.view.search mail.group.member search New
mail_group_member_view_tree mail.group.member.view.tree mail.group.member tree New
mail_group_message_reject_form mail.group.message.reject.form mail.group.message.reject form New
mail_group_message_view_form mail.group.message.view.form mail.group.message form New
mail_group_message_view_list mail.group.message.view.list mail.group.message tree New
mail_group_message_view_search mail.group.message.view.search mail.group.message search New
mail_group_moderation_view_search mail.group.moderation.view.search mail.group.moderation search New
mail_group_moderation_view_tree mail.group.moderation.view.tree mail.group.moderation tree New
mail_group_notify_moderation mail_group_notify_moderation ir.ui.view qweb New
mail_group_view_form mail.group.view.form mail.group form New
mail_group_view_kanban mail.group.view.kanban mail.group kanban New
mail_group_view_list mail.group.view.list mail.group tree New
mail_group_view_search mail.group.view.search mail.group search New
mail_groups Mailing Lists ir.ui.view qweb New
message_attachments message_attachments ir.ui.view qweb New
message_footer Message Footer ir.ui.view qweb New
messages_short messages_short ir.ui.view qweb New
portal_breadcrumbs_group Portal layout : mail group menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
Models touched (5)

New fields (26)
  • access_group_id Many2one → res.groups
    default=<expr> string='Authorized Group' args: 'res.groups'
  • access_mode Selection
    default='public' required=True string='Privacy' args: [('public', 'Everyone'), ('members', 'Members only'), ('groups', 'Selected group of users')]
  • active Boolean
    default=True args: 'Active'
  • alias_fullname Char
    compute='_compute_alias_fullname' args: 'Alias Full Name'
  • alias_name Char
    copy=False readonly=False related='alias_id.alias_name' args: 'Alias Name'
  • can_manage_group Boolean
    compute='_compute_can_manage_group' help='Can manage the members' args: 'Can Manage'
  • description Text
    args: 'Description'
  • image_128 Image
    max_height=128 max_width=128 args: 'Image'
  • is_member Boolean
    compute='_compute_is_member' args: 'Is Member'
  • is_moderator Boolean
    compute='_compute_is_moderator' help='Current user is a moderator of the group' string='Moderator'
  • mail_group_message_count Integer
    compute='_compute_mail_group_message_count' help='Number of message in this group' args: 'Messages Count'
  • mail_group_message_ids One2many → mail.group.message
    string='Pending Messages' args: 'mail.group.message', 'mail_group_id'
  • mail_group_message_last_month_count Integer
    compute='_compute_mail_group_message_last_month_count' args: 'Messages Per Month'
  • mail_group_message_moderation_count Integer
    compute='_compute_mail_group_message_moderation_count' help='Messages that need an action' args: 'Pending Messages Count'
  • member_count Integer
    compute='_compute_member_count' args: 'Members Count'
  • member_ids One2many → mail.group.member
    string='Members' args: 'mail.group.member', 'mail_group_id'
  • member_partner_ids Many2many → res.partner
    compute='_compute_member_partner_ids' search='_search_member_partner_ids' string='Partners Member' args: 'res.partner'
  • moderation Boolean
    string='Moderate this group'
  • moderation_guidelines Boolean
    help='Newcomers on this moderated group will automatically receive the guidelines.' string='Send guidelines to new subscribers'
  • moderation_guidelines_msg Html
    string='Guidelines'
  • moderation_notify Boolean
    help='People receive an automatic notification about their message being waiting for moderation.' string='Automatic notification'
  • moderation_notify_msg Html
    string='Notification message'
  • moderation_rule_count Integer
    compute='_compute_moderation_rule_count' string='Moderated emails count'
  • moderation_rule_ids One2many → mail.group.moderation
    string='Moderated Emails' args: 'mail.group.moderation', 'mail_group_id'
  • moderator_ids Many2many → res.users
    domain=<expr> string='Moderators' args: 'res.users', 'mail_group_moderator_rel'
  • name Char
    required=True translate=True args: 'Name'
Public methods (7)
  • action_join(self)
  • action_leave(self)
  • action_send_guidelines(self, members=None)
    Send guidelines to given members.
  • default_get(self, fields)
    @api.model
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.
  • message_post(self, body='', subject=None, email_from=None, author_id=None, **kwargs)
    @api.returns('mail.message', <expr>)
    Custom posting process. This model does not inherit from ``mail.thread`` but uses the mail gateway so few methods should be defined. This custom posting process works as follow * create a ``mail.message`` based on incoming email; * create linked ``mail.group.message`` that encapsulates message in a format used in mail groups; * apply moderation rules; :return message: newly-created mail.message
  • message_update(self, msg_dict, update_vals=None)
    @api.model
    Add the method to make the mail gateway flow work with this model.

New fields (4)
  • email Char
    compute='_compute_email' readonly=False store=True string='Email'
  • email_normalized Char
    compute='_compute_email_normalized' index=True store=True string='Normalized Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • partner_id Many2one → res.partner
    ondelete='cascade' args: 'res.partner', 'Partner'
Public methods (0)

No public methods.

New fields (14)
  • attachment_ids Many2many
    readonly=False related='mail_message_id.attachment_ids'
  • author_id Many2one
    readonly=False related='mail_message_id.author_id'
  • author_moderation Selection
    compute='_compute_author_moderation' string='Author Moderation Status' args: [('ban', 'Banned'), ('allow', 'Whitelisted')]
  • body Html
    readonly=False related='mail_message_id.body'
  • email_from Char
    readonly=False related='mail_message_id.email_from'
  • email_from_normalized Char
    compute='_compute_email_from_normalized' store=True args: 'Normalized From'
  • group_message_child_ids One2many → mail.group.message
    string='Childs' args: 'mail.group.message', 'group_message_parent_id'
  • group_message_parent_id Many2one → mail.group.message
    store=True string='Parent' args: 'mail.group.message'
  • is_group_moderated Boolean
    related='mail_group_id.moderation' args: 'Is Group Moderated'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • mail_message_id Many2one → mail.message
    copy=False index=True ondelete='cascade' required=True args: 'mail.message', 'Mail Message'
  • moderation_status Selection
    copy=False default='pending_moderation' index=True required=True string='Status' args: [('pending_moderation', 'Pending Moderation'), ('accepted', 'Accepted'), ('rejected', 'Rejected')]
  • moderator_id Many2one → res.users
    string='Moderated By' args: 'res.users'
  • subject Char
    readonly=False related='mail_message_id.subject'
Public methods (8)
  • action_moderate_accept(self)
    Accept the incoming email. Will send the incoming email to all members of the group.
  • action_moderate_allow(self)
  • action_moderate_ban(self)
  • action_moderate_ban_with_comment(self, ban_subject, ban_comment)
  • action_moderate_reject(self)
  • action_moderate_reject_with_comment(self, reject_subject, reject_comment)
  • copy(self, default=None)
  • create(self, values_list)
    @api.model_create_multi

New fields (6)
  • action Selection
    required=True string='Action' args: [('reject', 'Reject'), ('ban', 'Ban')]
  • body Html
    default='' sanitize_style=True args: 'Contents'
  • email_from_normalized Char
    related='mail_group_message_id.email_from_normalized' args: 'Email From'
  • mail_group_message_id Many2one → mail.group.message
    readonly=True required=True string='Message' args: 'mail.group.message'
  • send_email Boolean
    compute='_compute_send_email' help='Send an email to the author of the message' args: 'Send Email'
  • subject Char
    compute='_compute_subject' readonly=False store=True args: 'Subject'
Public methods (1)
  • action_send_mail(self)

New fields (3)
  • email Char
    required=True string='Email'
  • mail_group_id Many2one → mail.group
    ondelete='cascade' required=True string='Group' args: 'mail.group'
  • status Selection
    default='ban' required=True string='Status' args: [('allow', 'Always Allow'), ('ban', 'Permanent Ban')]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)