diff --git a/functions.tf b/functions.tf index c5e13e35ab321b3a79a3df02a7b9f4dc0269e7c0..0c8990c299da85a5157c8f8ddca449ca9e3f8f8f 100644 --- a/functions.tf +++ b/functions.tf @@ -14,6 +14,7 @@ locals { "transmission", "vouch", "ssh", + "smtp", ] function_names = [for name in local.functions : "${local.function_name_prefix}-${replace(name, "_", "")}"] } diff --git a/src/smtp.py b/src/smtp.py new file mode 100644 index 0000000000000000000000000000000000000000..3b0509ba690be59b3576dcf1dbbd4908a82e6e67 --- /dev/null +++ b/src/smtp.py @@ -0,0 +1,34 @@ +from smtplib import SMTP +from utils import publish + + +def check_smtp(port): + """Check the SMTP port.""" + try: + smtp = SMTP("smtp.shore.co.il", port) + ehlo = smtp.ehlo() + if ehlo[0] != 250 or "LOGIN" in ehlo[1].decode().split(): + return [False, f"First EHLO on port {port} failed."] + if smtp.starttls() != (220, b"TLS go ahead"): + return [False, f"STARTTLS on port {port} failed."] + ehlo = smtp.ehlo() + if ehlo[0] != 250 or "LOGIN" not in ehlo[1].decode().split(): + return [False, f"Second EHLO on port {port} failed."] + smtp.close() + except Exception as e: # pylint: disable=broad-except,invalid-name + print(str(e)) + return [False, f"SMTP failure on port {port}."] + return [True, f"SMTP on port {port} is OK."] + + +def handler(event, context): # pylint: disable=unused-argument + """Lambda event handler.""" + for port in [25, 587]: + success, message = check_smtp(port) + print(message) + if not success: + publish(message) + + +if __name__ == "__main__": + handler("event", "context")