#!/usr/bin/python3 # Copyright 2021 Adam Rabjerg # Licensed under GNU GPL-3.0-or-later # https://www.gnu.org/licenses/gpl-3.0.txt # Imports import smtplib import configparser import datetime import os from platform import node from email.utils import make_msgid ## Setup basic variables HOSTNAME = node() recivers = ["example@example.com", "example2@example.com"] subject = f"Backup on \"{HOSTNAME}\", for SERVICE complete." ## here is a good place to add any aditional data you want to report, like system utilisation. message = f"Result of backup on server {HOSTNAME}\n" ## LASTLOG is the path defined in backup.env, this is read and put in the message. 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/user/git/disaster-recovery/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. ## The header has all this extra infomation to make the mail relays happy and not trigger any antispam. ## We want to be nice. ## Don't mess with anything (like remove tailing newline) but the sender/reciever/subject unless you really know what you are doing. 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 and send our email. msg = f"{header}\n{message}" server.sendmail(sender, receiver, msg.encode("utf-8")) ## Close connection and return any errors. return server.quit() ## Here we trigger the sending of mail(s) for receiver in recivers: send_email(receiver, sender, subject, message)