Skip to content

Commit

Permalink
⚙️ FEATURE: Improved email search
Browse files Browse the repository at this point in the history
  • Loading branch information
FernandoCelmer committed Apr 29, 2024
1 parent cb5c5c3 commit 00a20b9
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 12 deletions.
20 changes: 14 additions & 6 deletions email_profile/message.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
"""
Message Module
"""

from email import message_from_bytes
from email.header import decode_header
from email.utils import parsedate_to_datetime

from email_profile.data import DataClass as Data
from email_profile.models import (
AttachmentModel,
EmailModel
)
from email_profile.models import AttachmentModel, EmailModel


class Message:
Expand All @@ -25,9 +27,15 @@ def decode_field(self, header) -> str:
field += sub[0].decode(encoding)
except Exception:
field += sub[0]

return field

def parsedate_to_datetime(self, date):
try:
return parsedate_to_datetime(date)
except ValueError:
pass
return None

def get_content(self, part) -> None:
content_type = part.get_content_type()

Expand Down Expand Up @@ -71,7 +79,7 @@ def result(self) -> EmailModel:
received=self.message.get("Received"),
dkim_signature=self.message.get("DKIM-Signature"),
content_type=self.message.get_content_type(),
date=parsedate_to_datetime(self.message.get("Date")),
date=self.parsedate_to_datetime(self.message.get("Date")),
from_who=self.decode_field(self.message.get("From")),
mime_version=self.message.get("Mime-Version"),
message_id=self.message.get("Message-ID"),
Expand Down
2 changes: 1 addition & 1 deletion email_profile/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def validate_status(status: str, raise_error: bool = True) -> StatusResponse:

@staticmethod
def validate_data(data: List[str]) -> List[str]:
data = [x.decode() for x in data]
data = [x.decode() for x in data[0].split()]
if len(data) == 1 and not data[0]:
return []
return data
Expand Down
25 changes: 20 additions & 5 deletions email_profile/where.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,26 @@ def list_id(self) -> List[str]:

def list_data(self) -> List[any]:
if self._data:
status, messages = self.server.fetch(','.join(self._data), '(RFC822)')
messages = [message for message in messages if message != b')']
_sum = 1
_sum_searching = 0
_groups = 1

for reference, text in messages:
_id = int(reference.split()[0])
self._message.append(Message(text, _id).result())
while _sum < len(self._data):
_sum += 100
_groups += 1

splited = [self._data[item::_groups] for item in range(_groups)]

for group_mail in splited:
_sum_searching += len(group_mail)

status, messages = self.server.fetch(','.join(group_mail), '(RFC822)')
messages = [message for message in messages if message != b')']

print(f"Searching: {_sum_searching}/{len(self._data)}")

for reference, text in messages:
_id = int(reference.split()[0])
self._message.append(Message(text, _id).result())

return self._message

0 comments on commit 00a20b9

Please sign in to comment.