v0.44.0: Add more REGEX patters for email matching
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user