summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/general/plugins/modules/mail.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:52:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:52:22 +0000
commit38b7c80217c4e72b1d8988eb1e60bb6e77334114 (patch)
tree356e9fd3762877d07cde52d21e77070aeff7e789 /ansible_collections/community/general/plugins/modules/mail.py
parentAdding upstream version 7.7.0+dfsg. (diff)
downloadansible-38b7c80217c4e72b1d8988eb1e60bb6e77334114.tar.xz
ansible-38b7c80217c4e72b1d8988eb1e60bb6e77334114.zip
Adding upstream version 9.4.0+dfsg.upstream/9.4.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/community/general/plugins/modules/mail.py')
-rw-r--r--ansible_collections/community/general/plugins/modules/mail.py36
1 files changed, 26 insertions, 10 deletions
diff --git a/ansible_collections/community/general/plugins/modules/mail.py b/ansible_collections/community/general/plugins/modules/mail.py
index feaac6923..1916c140c 100644
--- a/ansible_collections/community/general/plugins/modules/mail.py
+++ b/ansible_collections/community/general/plugins/modules/mail.py
@@ -114,18 +114,18 @@ options:
default: utf-8
subtype:
description:
- - The minor mime type, can be either C(plain) or C(html).
- - The major type is always C(text).
+ - The minor mime type, can be either V(plain) or V(html).
+ - The major type is always V(text).
type: str
choices: [ html, plain ]
default: plain
secure:
description:
- - If C(always), the connection will only send email if the connection is Encrypted.
+ - If V(always), the connection will only send email if the connection is Encrypted.
If the server doesn't accept the encrypted connection it will fail.
- - If C(try), the connection will attempt to setup a secure SSL/TLS session, before trying to send.
- - If C(never), the connection will not attempt to setup a secure SSL/TLS session, before sending
- - If C(starttls), the connection will try to upgrade to a secure SSL/TLS connection, before sending.
+ - If V(try), the connection will attempt to setup a secure SSL/TLS session, before trying to send.
+ - If V(never), the connection will not attempt to setup a secure SSL/TLS session, before sending
+ - If V(starttls), the connection will try to upgrade to a secure SSL/TLS connection, before sending.
If it is unable to do so it will fail.
type: str
choices: [ always, never, starttls, try ]
@@ -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'''
@@ -205,10 +212,11 @@ EXAMPLES = r'''
body: System {{ ansible_hostname }} has been successfully provisioned.
secure: starttls
-- name: Sending an e-mail using StartTLS, remote server, custom EHLO
+- name: Sending an e-mail using StartTLS, remote server, custom EHLO, and timeout of 10 seconds
community.general.mail:
host: some.smtp.host.tld
port: 25
+ timeout: 10
ehlohost: my-resolvable-hostname.tld
to: John Smith <john.smith@example.com>
subject: Ansible-report
@@ -221,7 +229,7 @@ import smtplib
import ssl
import traceback
from email import encoders
-from email.utils import parseaddr, formataddr, formatdate
+from email.utils import parseaddr, formataddr, formatdate, make_msgid
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
@@ -253,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']],
)
@@ -274,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
@@ -348,13 +358,19 @@ def main():
msg['From'] = formataddr((sender_phrase, sender_addr))
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = Header(subject, charset)
+ try:
+ 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:
# NOTE: Backward compatible with old syntax using '|' as delimiter
for hdr in [x.strip() for x in header.split('|')]:
try:
- h_key, h_val = hdr.split('=')
+ h_key, h_val = hdr.split('=', 1)
h_val = to_native(Header(h_val, charset))
msg.add_header(h_key, h_val)
except Exception:
@@ -382,7 +398,7 @@ def main():
part = MIMEText(body + "\n\n", _subtype=subtype, _charset=charset)
msg.attach(part)
- # NOTE: Backware compatibility with old syntax using space as delimiter is not retained
+ # NOTE: Backward compatibility with old syntax using space as delimiter is not retained
# This breaks files with spaces in it :-(
for filename in attach_files:
try: