v0.44.0: Add more REGEX patters for email matching

This commit is contained in:
Clemens Schwaighofer
2026-01-08 14:59:49 +09:00
parent f91e0bb93a
commit ae938f9909
2 changed files with 30 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
# MARK: Project info # MARK: Project info
[project] [project]
name = "corelibs" name = "corelibs"
version = "0.43.4" version = "0.44.0"
description = "Collection of utils for Python scripts" description = "Collection of utils for Python scripts"
readme = "README.md" readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.13"

View File

@@ -4,6 +4,8 @@ Send email wrapper
import smtplib import smtplib
from email.message import EmailMessage from email.message import EmailMessage
from email.header import Header
from email.utils import formataddr, parseaddr
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
if TYPE_CHECKING: if TYPE_CHECKING:
from corelibs.logging_handling.log import Logger from corelibs.logging_handling.log import Logger
@@ -133,21 +135,30 @@ class SendEmail:
_subject = template["subject"] _subject = template["subject"]
_body = template["body"] _body = template["body"]
for key, value in replace.items(): for key, value in replace.items():
_subject = _subject.replace(f"{{{{{key}}}}}", value) placeholder = f"{{{{{key}}}}}"
_body = _body.replace(f"{{{{{key}}}}}", value) _subject = _subject.replace(placeholder, value)
_body = _body.replace(placeholder, value)
name, addr = parseaddr(from_email)
if name:
# Encode the name part with MIME encoding
encoded_name = str(Header(name, 'utf-8'))
from_email_encoded = formataddr((encoded_name, addr))
else:
from_email_encoded = from_email
# create a simple email and add subhect, from email # create a simple email and add subhect, from email
msg_email = EmailMessage() msg_email = EmailMessage()
# msg.set_content(_body, charset='utf-8', cte='quoted-printable') # msg.set_content(_body, charset='utf-8', cte='quoted-printable')
msg_email.set_content(_body, charset="utf-8") msg_email.set_content(_body, charset="utf-8")
msg_email["Subject"] = _subject msg_email["Subject"] = _subject
msg_email["From"] = from_email msg_email["From"] = from_email_encoded
# push to array for sening # push to array for sening
msg.append(msg_email) msg.append(msg_email)
return msg return msg
def send_email_list( def send_email_list(
self, self,
email: list[EmailMessage], receivers: list[str], emails: list[EmailMessage],
receivers: list[str],
combined_send: bool | None = None, combined_send: bool | None = None,
test_only: bool | None = None test_only: bool | None = None
): ):
@@ -170,18 +181,27 @@ class SendEmail:
smtp = smtplib.SMTP(smtp_host) smtp = smtplib.SMTP(smtp_host)
except ConnectionRefusedError as e: except ConnectionRefusedError as e:
self.log.error("Could not open SMTP connection to: %s, %s", smtp_host, e) self.log.error("Could not open SMTP connection to: %s, %s", smtp_host, e)
# prepare receiver list
receivers_encoded: list[str] = []
for __receiver in receivers:
to_name, to_addr = parseaddr(__receiver)
if to_name:
# Encode the name part with MIME encoding
encoded_to_name = str(Header(to_name, 'utf-8'))
receivers_encoded.append(formataddr((encoded_to_name, to_addr)))
else:
receivers_encoded.append(__receiver)
# loop over messages and then over recievers # loop over messages and then over recievers
for msg in email: for msg in emails:
if combined_send is True: if combined_send is True:
msg["To"] = ", ".join(receivers) msg["To"] = ", ".join(receivers_encoded)
if not self.settings.get('test'): if not self.settings.get('test'):
if smtp is not None: if smtp is not None:
smtp.send_message(msg, msg["From"], receivers) smtp.send_message(msg, msg["From"], receivers_encoded)
else: else:
self.log.info(f"[EMAIL] Test, not sending email\n{msg}") self.log.info(f"[EMAIL] Test, not sending email\n{msg}")
else: else:
for receiver in receivers: for receiver in receivers_encoded:
# send to
self.log.debug(f"===> Send to: {receiver}") self.log.debug(f"===> Send to: {receiver}")
if "To" in msg: if "To" in msg:
msg.replace_header("To", receiver) msg.replace_header("To", receiver)