Files
disaster_recovery/mail_template.py
2021-03-22 21:50:49 +01:00

84 lines
2.5 KiB
Python
Executable File

#!/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/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.
## 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)