PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/smtp.py |
""" Module for Sending Messages via SMTP .. versionadded:: 2014.7.0 :depends: - smtplib python module :configuration: This module can be used by either passing a jid and password directly to send_message, or by specifying the name of a configuration profile in the minion config, minion pillar, or master config. For example: .. code-block:: yaml my-smtp-login: smtp.server: smtp.domain.com smtp.tls: True smtp.sender: admin@domain.com smtp.username: myuser smtp.password: verybadpass The resourcename refers to the resource that is using this account. It is user-definable, and optional. The following configurations are both valid: .. code-block:: yaml my-smtp-login: smtp.server: smtp.domain.com smtp.tls: True smtp.sender: admin@domain.com smtp.username: myuser smtp.password: verybadpass another-smtp-login: smtp.server: smtp.domain.com smtp.tls: True smtp.sender: admin@domain.com smtp.username: myuser smtp.password: verybadpass """ import logging import os import socket import salt.utils.files log = logging.getLogger(__name__) HAS_LIBS = False try: import email.mime.application import email.mime.multipart import email.mime.text import smtplib HAS_LIBS = True except ImportError: pass __virtualname__ = "smtp" def __virtual__(): """ Only load this module if smtplib is available on this minion. """ if HAS_LIBS: return __virtualname__ return (False, "This module is only loaded if smtplib is available") def send_msg( recipient, message, subject="Message from Salt", sender=None, server=None, use_ssl="True", username=None, password=None, profile=None, attachments=None, ): """ Send a message to an SMTP recipient. To send a message to multiple \ recipients, the recipients should be in a comma-seperated Python string. \ Designed for use in states. CLI Examples: .. code-block:: bash salt '*' smtp.send_msg 'admin@example.com' 'This is a salt module test' profile='my-smtp-account' salt '*' smtp.send_msg 'admin@example.com,admin2@example.com' 'This is a salt module test for multiple recipients' profile='my-smtp-account' salt '*' smtp.send_msg 'admin@example.com' 'This is a salt module test' username='myuser' password='verybadpass' sender='admin@example.com' server='smtp.domain.com' salt '*' smtp.send_msg 'admin@example.com' 'This is a salt module test' username='myuser' password='verybadpass' sender='admin@example.com' server='smtp.domain.com' attachments="['/var/log/messages']" """ if profile: creds = __salt__["config.option"](profile) server = creds.get("smtp.server") use_ssl = creds.get("smtp.tls") sender = creds.get("smtp.sender") username = creds.get("smtp.username") password = creds.get("smtp.password") if attachments: msg = email.mime.multipart.MIMEMultipart() msg.attach(email.mime.text.MIMEText(message)) else: msg = email.mime.text.MIMEText(message) msg["Subject"] = subject msg["From"] = sender msg["To"] = recipient recipients = [r.strip() for r in recipient.split(",")] try: if use_ssl in ["True", "true"]: smtpconn = smtplib.SMTP_SSL(server) else: smtpconn = smtplib.SMTP(server) except socket.gaierror as _error: log.debug("Exception: %s", _error) return False if use_ssl not in ("True", "true"): smtpconn.ehlo() if smtpconn.has_extn("STARTTLS"): try: smtpconn.starttls() except smtplib.SMTPHeloError: log.debug("The server didn’t reply properly to the HELO greeting.") return False except smtplib.SMTPException: log.debug("The server does not support the STARTTLS extension.") return False except RuntimeError: log.debug( "SSL/TLS support is not available to your Python interpreter." ) return False smtpconn.ehlo() if username and password: try: smtpconn.login(username, password) except smtplib.SMTPAuthenticationError as _error: log.debug("SMTP Authentication Failure") return False if attachments: for f in attachments: name = os.path.basename(f) with salt.utils.files.fopen(f, "rb") as fin: att = email.mime.application.MIMEApplication(fin.read(), Name=name) att["Content-Disposition"] = f'attachment; filename="{name}"' msg.attach(att) try: smtpconn.sendmail(sender, recipients, msg.as_string()) except smtplib.SMTPRecipientsRefused: log.debug("All recipients were refused.") return False except smtplib.SMTPHeloError: log.debug("The server didn’t reply properly to the HELO greeting.") return False except smtplib.SMTPSenderRefused: log.debug("The server didn’t accept the %s.", sender) return False except smtplib.SMTPDataError: log.debug("The server replied with an unexpected error code.") return False smtpconn.quit() return True