in tools/archiver.py [0:0]
def message_body(self, msg: email.message.Message) -> typing.Optional[Body]:
"""
Fetches the proper text body from an email as an archiver.Body object
:param msg: The email or part of it to examine for proper body
:return: archiver.Body object
"""
body = None
first_html = None
for part in msg.walk():
# can be called from importer
if self.verbose:
print("Content-Type: %s" % part.get_content_type())
"""
Find the first body part and the first HTML part
Note: cannot use break here because firstHTML is needed if len(body) <= 1
"""
try:
if body is None and part.get_content_type() in [
"text/plain",
"text/enriched",
]:
body = Body(part)
elif (
not first_html
and part.get_content_type() == "text/html"
):
first_html = Body(part)
except Exception as err:
entry = sys.exc_info()[-1]
if entry: # avoid mypy complaint
print('Error on line {}:'.format(entry.tb_lineno), type(err).__name__, err)
else: # Should not happen, but just in case
print('Failed to create Body(part):',type(err).__name__, err)
# this requires a GPL lib, user will have to install it themselves
if first_html and (
body is None
or len(body) <= 1
or (self.ignore_body and str(body).find(str(self.ignore_body)) != -1)
):
body = first_html
body.html_as_source = True
# Convert HTML to text if mod is installed and enabled, otherwise keep the source as-is
if self.html:
body.assign(self.html2text(str(body)))
body.html_as_source = False
return body