Source code for apstools.utils.email
"""
email Support
+++++++++++++++++++++++++++++++++++++++
.. autosummary::
~EmailNotifications
"""
import smtplib
from email.mime.text import MIMEText
from .misc import run_in_thread
[docs]class EmailNotifications(object):
"""
send email notifications when requested
.. index:: apstools Utility; EmailNotifications
use default OS mail utility (so no credentials needed)
EXAMPLE
Send email(s) when `feedback_limits_approached`
(a hypothetical boolean) is `True`::
# setup
from apstools.utils import EmailNotifications
SENDER_EMAIL = "instrument_user@email.host.tld"
email_notices = EmailNotifications(SENDER_EMAIL)
email_notices.add_addresses(
# This list receives email when send() is called.
"joe.user@goodmail.com",
"instrument_team@email.host.tld",
# others?
)
# ... later
if feedback_limits_approached:
# send emails to list
subject = "Feedback problem"
message = "Feedback is very close to its limits."
email_notices.send(subject, message)
"""
def __init__(self, sender=None):
self.addresses = []
self.notify_on_feedback = True
self.sender = sender or "nobody@localhost"
self.smtp_host = "localhost"
def add_addresses(self, *args):
for address in args:
self.addresses.append(address)
@run_in_thread
def send(self, subject, message):
"""send ``message`` to all addresses"""
msg = MIMEText(message)
msg["Subject"] = subject
msg["From"] = self.sender
msg["To"] = ",".join(self.addresses)
s = smtplib.SMTP(self.smtp_host)
s.sendmail(self.sender, self.addresses, msg.as_string())
s.quit()
# -----------------------------------------------------------------------------
# :author: Pete R. Jemian
# :email: jemian@anl.gov
# :copyright: (c) 2017-2024, UChicago Argonne, LLC
#
# Distributed under the terms of the Argonne National Laboratory Open Source License.
#
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------