Parses RFC822 content (string or bytes).
Source code in email_profile/clients/imap/parser.py
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222 | class EmailParser:
"""Parses RFC822 content (string or bytes)."""
__slots__ = ("_msg",)
def __init__(self, content: bytes | str) -> None:
if isinstance(content, bytes):
self._msg = message_from_bytes(content)
else:
self._msg = message_from_string(content)
def message_id(self) -> Optional[str]:
return self._msg.get("Message-ID")
def message_id_or_hash(self, raw: bytes | str) -> str:
mid = self.message_id()
if mid:
return mid
data = raw if isinstance(raw, bytes) else raw.encode("utf-8")
return sha256(data).hexdigest()
def date(self) -> Optional[datetime]:
raw_date = self._msg.get("Date")
if not raw_date:
return None
try:
return parsedate_to_datetime(raw_date)
except (TypeError, ValueError):
return None
def subject(self) -> Optional[str]:
return self._msg.get("Subject")
def from_(self) -> Optional[str]:
value = self._msg.get("From", "")
return parseaddr(value)[1] or None
def to(self) -> Optional[str]:
value = self._msg.get("To", "")
return parseaddr(value)[1] or None
def header(self, name: str) -> Optional[str]:
return self._msg.get(name)
|
__slots__ = ('_msg',)
class-attribute
instance-attribute
__init__(content)
Source code in email_profile/clients/imap/parser.py
| def __init__(self, content: bytes | str) -> None:
if isinstance(content, bytes):
self._msg = message_from_bytes(content)
else:
self._msg = message_from_string(content)
|
date()
Source code in email_profile/clients/imap/parser.py
201
202
203
204
205
206
207
208 | def date(self) -> Optional[datetime]:
raw_date = self._msg.get("Date")
if not raw_date:
return None
try:
return parsedate_to_datetime(raw_date)
except (TypeError, ValueError):
return None
|
from_()
Source code in email_profile/clients/imap/parser.py
| def from_(self) -> Optional[str]:
value = self._msg.get("From", "")
return parseaddr(value)[1] or None
|
Source code in email_profile/clients/imap/parser.py
| def header(self, name: str) -> Optional[str]:
return self._msg.get(name)
|
message_id()
Source code in email_profile/clients/imap/parser.py
| def message_id(self) -> Optional[str]:
return self._msg.get("Message-ID")
|
message_id_or_hash(raw)
Source code in email_profile/clients/imap/parser.py
| def message_id_or_hash(self, raw: bytes | str) -> str:
mid = self.message_id()
if mid:
return mid
data = raw if isinstance(raw, bytes) else raw.encode("utf-8")
return sha256(data).hexdigest()
|
subject()
Source code in email_profile/clients/imap/parser.py
| def subject(self) -> Optional[str]:
return self._msg.get("Subject")
|
to()
Source code in email_profile/clients/imap/parser.py
| def to(self) -> Optional[str]:
value = self._msg.get("To", "")
return parseaddr(value)[1] or None
|