''' simple tool for sending email with sendmail, postfix or ssmtpd import pysema send( ['alice@example.com', 'bob@example.com'], 'really good subject line', 'Message body goes here' ) ''' import subprocess from email.message import EmailMessage SENDMAIL_PATH = '/usr/bin/sendmail' class SendMailException(Exception): ''' Exception while using pysema ''' pass def send(to=None, subject='', message='', **headers): msg = create_message(to, subject, message, **headers) send_message(msg) def create_message(to=None, subject='', message='', **headers): if isinstance(to, str): recipients = to elif isinstance(to, (list, set, tuple)): recipients = ', '.join(to) else: raise SendMailException('No recipients given') # ensure that the 'from' keyword (if given) is uppercase sender_mail = headers.pop('from', None) if sender_mail is not None: headers['From'] = sender_mail headers['To'] = recipients headers['Subject'] = subject msg = EmailMessage() msg.set_content(message) for key, value in headers.items(): msg[key] = value return msg def send_message(msg): if not isinstance(msg, EmailMessage): raise SendMailException('Type Error: not an EmailMessage') try: subprocess.run( [SENDMAIL_PATH, '-t', '-oi'], input=msg.as_bytes(), check=True ) except subprocess.CalledProcessError as e: raise SendMailException from e