Commit 09282ac7 authored by Seblu's avatar Seblu
Browse files

Support full tls mode and port config for sendmail

parent ad98138e
[sendmail] [sendmail]
# Options in this section are about sendmail command
# Mail address # To mail address (mandatory)
# to = archversion@gmail.com # to = archversion@gmail.com
# From mail address
# from = archversion@gmail.com
# default value is archversion
# Mail subject # Mail subject
# subject = Archversion report # 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 server tls mode
# smtp = smtp.honeypot.org # tls = no | starttls | yes
\ No newline at end of file # default value is no
...@@ -30,7 +30,7 @@ from email.mime.text import MIMEText ...@@ -30,7 +30,7 @@ from email.mime.text import MIMEText
from email.utils import formatdate from email.utils import formatdate
from io import StringIO from io import StringIO
from pprint import pprint from pprint import pprint
from smtplib import SMTP from smtplib import SMTP, SMTP_SSL
import argparse import argparse
import logging import logging
import os import os
...@@ -173,14 +173,19 @@ def command_sendmail(args, vctrl): ...@@ -173,14 +173,19 @@ def command_sendmail(args, vctrl):
# check args # check args
try: try:
to = config["mail"]["to"] 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") 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") login = config["smtp"].get("login")
password = config["smtp"].get("password") 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: except KeyError as exp:
raise BaseError("Unable to load sendmail config") from exp 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 # capture a report
stdout = StringIO() stdout = StringIO()
stdout_bak = sys.stdout stdout_bak = sys.stdout
...@@ -198,13 +203,18 @@ def command_sendmail(args, vctrl): ...@@ -198,13 +203,18 @@ def command_sendmail(args, vctrl):
msg["Date"] = formatdate(localtime=True) msg["Date"] = formatdate(localtime=True)
# send the mail # send the mail
try: try:
s = SMTP(smtp) con = SMTP_SSL() if tls == "yes" else SMTP()
if starttls: # since python3.7 we need to set host to establish ssl/tls connections
s.starttls() # 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: if login:
s.login(login, password) con.login(login, password)
s.send_message(msg) con.send_message(msg)
s.quit() con.quit()
except Exception as exp: except Exception as exp:
raise BaseError("Unable to send mail") from exp raise BaseError("Unable to send mail") from exp
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment