That was it, thx! Adding "return" makes total sense. With "print", it was outputting to stdout before the script sent the email.
Here's the final code:
Here's the final code:
from email.headerregistry import Address from email.message import EmailMessage from email.mime.text import MIMEText import os import smtplib import psutil # mail server details mail_server = 'localhost' mail_server_port = 25 # email addresses email_address = '' recipient_address = '' subject_desc = 'Test' # linux mount points def mounts(): results = [] devs = psutil.disk_partitions() for dev in devs: part = int(psutil.disk_usage(dev.mountpoint).percent) if part > 40: results.append([dev.mountpoint, part]) return results list_mounts = list(mounts()) def list_out(list_in): return '\n'.join('Drive: {0:10s} Used Space: {1:5.2f}'.format(*drive) for drive in list_in) email_body = list_out(list_mounts) # email function def create_email_message(from_address, to_address, subject, body): msg = EmailMessage() msg['From'] = from_address msg['To'] = to_address msg['Subject'] = subject msg.set_content(body) return msg if __name__ == '__main__': msg = create_email_message( from_address=email_address, to_address=recipient_address, subject=subject_desc, body=email_body ) with smtplib.SMTP(mail_server, mail_server_port) as smtp_server: smtp_server.ehlo() smtp_server.send_message(msg) print('Email sent successfully')Thanks everyone for your help with this!