added support in vendors.gmail for 'label' and 'raw' searches, added these to documentation.
This commit is contained in:
@@ -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
8
go.py
Normal 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))
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
7
imbox/vendors/gmail.py
vendored
7
imbox/vendors/gmail.py
vendored
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user