Skip to content
Commits on Source (4)
# Maintainer: Sébastien Luttringer
pkgname=archversion-git
pkgver=$(git log --pretty=format:''|wc -l)
pkgrel=1
pkgver=$(git rev-list --count HEAD)
pkgrel=$(date +%y%m%d)
pkgdesc='Archlinux Version Controller (Git version)'
arch=('any')
url='https://github.com/seblu/archversion'
......
[sendmail]
# Options in this section are about sendmail command
# Mail address
# To mail address (mandatory)
# to = archversion@gmail.com
# From mail address
# from = archversion@gmail.com
# default value is archversion
# Mail subject
# subject = Archversion report
# default value is "Archversion report"
# SMTP server address (mandatory)
# host = smtp.honeypot.org
# SMTP server port
# port = 465
# default value is 25
# SMTP server
# smtp = smtp.honeypot.org
\ No newline at end of file
# SMTP server tls mode
# tls = no | starttls | yes
# default value is no
......@@ -23,14 +23,14 @@
from archversion import VERSION, CONFIG_SENDMAIL
from archversion.config import BaseConfigFile
from archversion.error import BaseError, MissingConfigFile, NoSuchFile
from archversion.error import ERR_FATAL, ERR_ABORT, ERR_UNKNOWN
from archversion.error import ERR_FATAL, ERR_ABORT
from archversion.pacman import parse_pkgbuild, pkgbuild_set_version, pkgbuild_update_checksums
from archversion.version import VersionController
from email.mime.text import MIMEText
from email.utils import formatdate
from io import StringIO
from pprint import pprint
from smtplib import SMTP
from smtplib import SMTP, SMTP_SSL
import argparse
import logging
import os
......@@ -173,15 +173,19 @@ def command_sendmail(args, vctrl):
# check args
try:
to = config["mail"]["to"]
from_ = config["mail"].get("from", "Archversion <noreply@archlinux.org>")
from_ = config["mail"].get("from", "archversion")
subject = config["mail"].get("subject", "Archversion Report")
smtp = config["smtp"]["host"]
host = config["smtp"]["host"]
port = config["smtp"].get("port", "25")
login = config["smtp"].get("login")
password = config["smtp"].get("password")
starttls = config["smtp"].get("starttls", "false").lower() in ("true", "yes")
tls = config["smtp"].get("tls", "no").lower()
except KeyError as exp:
logging.error("Invalid sendmail config: %s" % exp)
exit(1)
raise BaseError("Unable to load sendmail config") from exp
# check tls param
tls_values = ("yes", "no", "starttls")
if tls not in tls_values:
raise BaseError("Invalid SMTP tls value: %s. Should be %s." % (tls, "|".join(tls_values)))
# capture a report
stdout = StringIO()
stdout_bak = sys.stdout
......@@ -199,16 +203,20 @@ def command_sendmail(args, vctrl):
msg["Date"] = formatdate(localtime=True)
# send the mail
try:
s = SMTP(smtp)
if starttls:
s.starttls()
con = SMTP_SSL() if tls == "yes" else SMTP()
# since python3.7 we need to set host to establish ssl/tls connections
# this cannot be done in SMTP class contructor because it try to
# initiate the connection at that time
con._host = host
con.connect(host, port)
if tls == "starttls":
con.starttls()
if login:
s.login(login, password)
s.send_message(msg)
s.quit()
con.login(login, password)
con.send_message(msg)
con.quit()
except Exception as exp:
logging.error("Sendmail fail: %s" % exp)
exit(1)
raise BaseError("Unable to send mail") from exp
def command_update(args, vctrl):
'''Handle update command call'''
......@@ -270,15 +278,11 @@ def main():
return args.func(args, vctrl)
except KeyboardInterrupt:
exit(ERR_ABORT)
except BaseError as exp:
logging.error(exp)
exit(ERR_FATAL)
except Exception as exp:
logging.error("Unknown error. Please report it with --debug.")
logging.error(exp)
logging.critical(exp)
if logging.getLogger().getEffectiveLevel() == logging.DEBUG:
raise
exit(ERR_UNKNOWN)
exit(ERR_FATAL)
if __name__ == '__main__':
main()
......
......@@ -24,7 +24,6 @@ import logging
ERR_USAGE = 1
ERR_FATAL = 2
ERR_ABORT = 3
ERR_UNKNOWN = 4
class BaseError(Exception):
'''First ancenstor of errors'''
......