#!/usr/bin/python3 # Imports import smtplib import configparser import datetime import os from platform import node from email.utils import make_msgid ## Setup variables HOSTNAME = node() recivers = ["example@example.com", "example2@example.com"] subject = f"Backup on \"{HOSTNAME}\", for SERVICE complete." message = f"Result of backup on server {HOSTNAME}\n" if "LASTLOG" not in os.environ: print("No logfile found, please set environment variable LASTLOG to the borg logfile") exit(5) else: logfile = os.environ["LASTLOG"] with open(logfile, "r") as log: for line in log.readlines(): message += line ## Load mail config from secrets file. config = configparser.ConfigParser() config.read('/home/adam/scripts/secrets.env') server_name = config['MAIL']['SERVER'] server_port = config['MAIL']['PORT'] server_pass = config['MAIL']['PASS'] mail_user = config['MAIL']['USER'] sender = mail_user def send_email(reciever, sender, subject, message): server = smtplib.SMTP(server_name, server_port) server.starttls() server.login(sender, server_pass) ## Yes we build the header entry for entry, this is done for readability. header = "" header += f"From: {sender}\n" header += f"To: {reciever}\n" header += f"Subject: {subject}\n" header += f"Date: {datetime.datetime.now().strftime('%a, %d %b %Y %H:%M:%S %Z')}\n" header += f"Message-ID: {make_msgid(domain=sender.split('@')[-1])}\n" header += "X-Mailer: python\n" header += "MIME-Version: 1.0\n" header += "Content-Type: text/plain; charset=utf-8\n" header += "Content-Disposition: inline\n" header += "Content-Transfer-Encoding: 8bit\n" ## And now we make the payload. msg = f"{header}\n{message}" # The /n separates the message from the headers server.sendmail(sender, receiver, msg.encode("utf-8")) for receiver in recivers: send_email(receiver , sender, subject, message)