From 7fdd30a47e5a5e4488549d9b9e67dcd5273a9c21 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 21 Mar 2021 23:33:31 +0100 Subject: [PATCH] Added email capabilities. Added lastlog, logs are now appended to .log and .log.last are send per email. --- backup.env.sample | 1 + mail_template.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++ make_backup.sh | 4 +-- secrets.env.sample | 10 +++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100755 mail_template.py create mode 100644 secrets.env.sample diff --git a/backup.env.sample b/backup.env.sample index b4fdbf5..33c7331 100644 --- a/backup.env.sample +++ b/backup.env.sample @@ -17,6 +17,7 @@ LOGPATH="/var/log/borg" mkdir -p $LOGPATH export LOGFILE="$LOGPATH/backup_docker.log" +export LASTLOG="$LOGPATH/backup_docker.log.last" ## Path to private-key PRIVATE_KEY_FILE="./id_ed25519" diff --git a/mail_template.py b/mail_template.py new file mode 100755 index 0000000..443fe65 --- /dev/null +++ b/mail_template.py @@ -0,0 +1,70 @@ +#!/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) + diff --git a/make_backup.sh b/make_backup.sh index 1640017..af6e5df 100755 --- a/make_backup.sh +++ b/make_backup.sh @@ -16,7 +16,7 @@ fi ## Setup that everything is written to log -exec > >(tee -i ${LOGFILE}) +exec > >(tee -ia ${LOGFILE} | tee -i ${LASTLOG}) exec 2>&1 ## Checks that a few important thins is set. @@ -42,4 +42,4 @@ borg create -v --stats \ echo "######### Backup Finished $(date) #########" - +/usr/bin/env python3 ./mail_template.py diff --git a/secrets.env.sample b/secrets.env.sample new file mode 100644 index 0000000..675bf20 --- /dev/null +++ b/secrets.env.sample @@ -0,0 +1,10 @@ +# +# Top secret stuff! +# It is your own responsible to ensure that secrets stays secret! +# + +[MAIL] +SERVER = mail.example.com +PORT = 587 +USER = service_notify@example.com +PASS = aelaGhuye8Co9cah7aighoo3oongohS4