diff --git a/changelogs/fragments/7765-mail-message-id.yml b/changelogs/fragments/7765-mail-message-id.yml new file mode 100644 index 0000000000..54af767ecf --- /dev/null +++ b/changelogs/fragments/7765-mail-message-id.yml @@ -0,0 +1,2 @@ +minor_changes: + - "mail module, mail callback plugin - allow to configure the domain name of the Message-ID header with a new ``message_id_domain`` option (https://github.com/ansible-collections/community.general/pull/7765)." diff --git a/plugins/callback/mail.py b/plugins/callback/mail.py index 9e8314baf8..1b847ea34c 100644 --- a/plugins/callback/mail.py +++ b/plugins/callback/mail.py @@ -71,6 +71,16 @@ options: ini: - section: callback_mail key: bcc + message_id_domain: + description: + - The domain name to use for the L(Message-ID header, https://en.wikipedia.org/wiki/Message-ID). + - The default is the hostname of the control node. + type: str + ini: + - section: callback_mail + key: message_id_domain + version_added: 8.2.0 + ''' import json @@ -131,7 +141,7 @@ class CallbackModule(CallbackBase): content += 'To: %s\n' % ', '.join([email.utils.formataddr(pair) for pair in to_addresses]) if self.cc: content += 'Cc: %s\n' % ', '.join([email.utils.formataddr(pair) for pair in cc_addresses]) - content += 'Message-ID: %s\n' % email.utils.make_msgid() + content += 'Message-ID: %s\n' % email.utils.make_msgid(domain=self.get_option('message_id_domain')) content += 'Subject: %s\n\n' % subject.strip() content += body diff --git a/plugins/modules/mail.py b/plugins/modules/mail.py index 9060b9c782..1916c140c3 100644 --- a/plugins/modules/mail.py +++ b/plugins/modules/mail.py @@ -140,6 +140,13 @@ options: - Allows for manual specification of host for EHLO. type: str version_added: 3.8.0 + message_id_domain: + description: + - The domain name to use for the L(Message-ID header, https://en.wikipedia.org/wiki/Message-ID). + - Note that this is only available on Python 3+. On Python 2, this value will be ignored. + type: str + default: ansible + version_added: 8.2.0 ''' EXAMPLES = r''' @@ -254,6 +261,7 @@ def main(): subtype=dict(type='str', default='plain', choices=['html', 'plain']), secure=dict(type='str', default='try', choices=['always', 'never', 'starttls', 'try']), timeout=dict(type='int', default=20), + message_id_domain=dict(type='str', default='ansible'), ), required_together=[['password', 'username']], ) @@ -275,6 +283,7 @@ def main(): subtype = module.params.get('subtype') secure = module.params.get('secure') timeout = module.params.get('timeout') + message_id_domain = module.params['message_id_domain'] code = 0 secure_state = False @@ -350,10 +359,11 @@ def main(): msg['Date'] = formatdate(localtime=True) msg['Subject'] = Header(subject, charset) try: - msg['Message-ID'] = make_msgid(domain='ansible') + msg['Message-ID'] = make_msgid(domain=message_id_domain) except TypeError: # `domain` is only available in Python 3 msg['Message-ID'] = make_msgid() + module.warn("The Message-ID domain cannot be set on Python 2; the system's hostname is used") msg.preamble = "Multipart message" for header in headers: