added support in vendors.gmail for 'label' and 'raw' searches, added these to documentation.

This commit is contained in:
2018-10-18 14:30:53 -04:00
parent 76fc7bfe8c
commit b2f82b6fb7
5 changed files with 28 additions and 6 deletions

View File

@@ -82,6 +82,10 @@ Usage
# Messages from a specific folder
messages_in_folder_social = imbox.messages(folder='Social')
# Some of Gmail's IMAP Extensions are supported (label and raw):
all_messages_with_an_attachment_from_martin = imbox.messages(folder='all', raw='from:martin@amon.cx has:attachment')
all_messages_labeled_finance = imbox.messages(folder='all', label='finance')
for uid, message in all_inbox_messages:
# Every message is an object with the following keys

8
go.py Normal file
View File

@@ -0,0 +1,8 @@
# coding: utf-8
from imbox import Imbox
import ssl
i = Imbox('imap.gmail.com', 'zev@avtranscription.com',
'vokhvstoizcfxsej', ssl_context=ssl._create_unverified_context())
ms = i.messages(
label='payables')
print(len(ms))

View File

@@ -90,6 +90,7 @@ class Imbox:
self.connection.select(
messages_class.FOLDER_LOOKUP.get((folder.lower())) or folder)
msg = " from folder '{}'".format(folder)
del kwargs['folder']
else:
msg = " from inbox"

View File

@@ -60,7 +60,8 @@ def get_mail_addresses(message, header_name):
for index, (address_name, address_email) in enumerate(addresses):
addresses[index] = {'name': decode_mail_header(address_name),
'email': address_email}
logger.debug("{} Mail address in message: <{}> {}".format(header_name.upper(), address_name, address_email))
logger.debug("{} Mail address in message: <{}> {}".format(
header_name.upper(), address_name, address_email))
return addresses
@@ -111,7 +112,8 @@ def parse_attachment(message_part):
name, value = decode_param(param)
if 'file' in name:
attachment['filename'] = value[1:-1] if value.startswith('"') else value
attachment['filename'] = value[1:-
1] if value.startswith('"') else value
if 'create-date' in name:
attachment['create-date'] = value
@@ -163,9 +165,11 @@ def parse_email(raw_email, policy=None):
email_parse_kwargs = {}
try:
email_message = email.message_from_string(raw_email, **email_parse_kwargs)
email_message = email.message_from_string(
raw_email, **email_parse_kwargs)
except UnicodeEncodeError:
email_message = email.message_from_string(raw_email.encode('utf-8'), **email_parse_kwargs)
email_message = email.message_from_string(
raw_email.encode('utf-8'), **email_parse_kwargs)
maintype = email_message.get_content_maintype()
parsed_email = {'raw_email': raw_email}
@@ -187,7 +191,7 @@ def parse_email(raw_email, policy=None):
content = decode_content(part)
is_inline = content_disposition is None \
or content_disposition.startswith("inline")
or content_disposition.startswith("inline")
if content_type == "text/plain" and is_inline:
body['plain'].append(content)
elif content_type == "text/html" and is_inline:

View File

@@ -26,5 +26,10 @@ class GmailMessages(Messages):
parser_policy,
**kwargs):
self.IMAP_ATTRIBUTE_LOOKUP['subject'] = '(X-GM-RAW "{}")'
self.IMAP_ATTRIBUTE_LOOKUP = {**self.IMAP_ATTRIBUTE_LOOKUP, **{'subject': '(X-GM-RAW "{}")',
'label': '(X-GM-LABELS "{}")',
'raw': '(X-GM-RAW "{}")',
}
}
super().__init__(connection, parser_policy, **kwargs)