import re import socket import time from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import formatdate from http import HTTPStatus from smtplib import SMTP_SSL as SMTP from loguru import logger from starlette.exceptions import HTTPException def valid_email(s): # https://regexr.com/2rhq7 pat = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" if re.match(pat, s): return True msg = f"SMTP - invalid email: {s}." logger.error(msg) raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, detail=msg) async def send_mail(emailaddress, email): valid_email(emailaddress.email) valid_email(email.receiver) ts = time.time() date = formatdate(ts, True) msg = MIMEMultipart("alternative") msg = MIMEMultipart("alternative") msg["Date"] = date msg["Subject"] = email.subject msg["From"] = emailaddress.email msg["To"] = email.receiver signature = "Email sent anonymiously by LNbits Sendmail extension." text = ( """\ """ + email.message + """ """ + signature + """ """ ) html = ( """\
""" + email.message + """
"""
+ signature
+ """