add multiples to

This commit is contained in:
2025-07-29 16:05:07 -03:00
parent 61f938cdb4
commit e71d0df6d5
3 changed files with 86 additions and 30 deletions

View File

@@ -1,29 +1,41 @@
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr
from email.utils import formataddr as formataddr_
from pathlib import Path
type Email = str
type NamedEmail = tuple[str, Email]
type Address = Email | list[Email] | NamedEmail | list[NamedEmail]
class Message:
def __init__(
self,
from_: tuple[str | None, str],
to: tuple[str | None, str],
from_: NamedEmail,
to: Address,
subject: str,
reply_to: tuple[str | None, str] | None = None,
cc: Address | None = None,
bcc: Address | None = None,
reply_to: NamedEmail | None = None,
content: str | None = None,
) -> None:
self._references = set()
self._body = MIMEMultipart('alternative')
self._message = MIMEMultipart('mixed')
self._message['From'] = formataddr(from_)
self._message['From'] = formataddr_(from_)
self._message['To'] = formataddr(to)
self._message['Subject'] = subject
self._message.attach(self._body)
if reply_to:
self._message['Reply-To'] = formataddr(reply_to)
self._message['Reply-To'] = formataddr_(reply_to)
if cc:
self._message['Cc'] = formataddr(cc)
if bcc:
self._message['Bcc'] = formataddr(bcc)
if content:
self.add_alternative(content, subtype='plain')
@@ -62,3 +74,13 @@ class Message:
self._message['References'] = ' '.join(self._references)
return self._message.as_bytes()
def formataddr(address: Address) -> str:
if isinstance(address, str):
return formataddr_((None, address))
if isinstance(address, tuple):
return formataddr_(address)
return ', '.join([formataddr(addr) for addr in address])