def test_attributes(self): test_msg_attr_set = {'subject', 'from_', 'to', 'cc', 'bcc', 'reply_to', 'date', 'date_str', 'text', 'html', 'headers', 'from_values', 'to_values', 'cc_values', 'bcc_values', 'reply_to_values'} test_att_attr_set = {'filename', 'content_id', 'content_type', 'content_disposition', 'payload'} eml_path_set = [] for path_variant in ('../tests/messages', 'tests/messages'): for root, subdirs, files in os.walk(path_variant): for file_name in files: full_path = os.path.abspath('{}/{}'.format(root, file_name)).replace('\\', '/') if full_path.lower().endswith('.eml'): eml_path_set.append(full_path) for eml_path in eml_path_set: py_path = eml_path.replace('/messages/', '/messages_data/')[:-4] + '.py' eml_data_module = _load_module(py_path) expected_data = eml_data_module.DATA # noqa with open(eml_path, 'rb') as f: bytes_data = f.read() message = MailMessage.from_bytes(bytes_data) for msg_attr in test_msg_attr_set: self.assertEqual(getattr(message, msg_attr), expected_data[msg_attr]) for att_i, att in enumerate(message.attachments): for att_attr in test_att_attr_set: self.assertEqual(getattr(att, att_attr), expected_data['attachments'][att_i][att_attr])
def test_attributes(self): msg_attr_set = { 'subject', 'from_', 'to', 'cc', 'bcc', 'reply_to', 'date', 'date_str', 'text', 'html', 'headers', 'from_values', 'to_values', 'cc_values', 'bcc_values', 'reply_to_values' } att_attr_set = { 'filename', 'content_id', 'content_type', 'content_disposition', 'payload' } for file_name in MESSAGE_ATTRIBUTES.keys(): message_data = MESSAGE_ATTRIBUTES[file_name] for msg_path in ('../tests/messages/{}.eml'.format(file_name), 'tests/messages/{}.eml'.format(file_name)): if not os.path.exists(msg_path): continue with open(msg_path, 'rb') as f: bytes_data = f.read() message = MailMessage.from_bytes(bytes_data) for msg_attr in msg_attr_set: self.assertEqual(getattr(message, msg_attr), message_data[msg_attr]) for att_i, att in enumerate(message.attachments): for att_attr in att_attr_set: self.assertEqual( getattr(att, att_attr), message_data['attachments'][att_i][att_attr])
from imap_tools import MailBox, MailMessage # parse .eml files attached to email messages with MailBox('imap.mail.com').login('*****@*****.**', 'password') as mailbox: for message in mailbox.fetch(): for filename, payload in message.attachments: if '.eml' in filename: print(filename) eml_email = MailMessage.from_bytes(payload) print('- subject: ', eml_email.subject) print('- date_str: ', eml_email.date_str)
from imap_tools import MailBox, MailMessage # parse .eml files attached to email messages with MailBox('imap.mail.com').login('*****@*****.**', 'password') as mailbox: for message in mailbox.fetch(): for att in message.attachments: if '.eml' in att.filename: print(att.filename) eml_email = MailMessage.from_bytes(att.payload) print('- subject: ', eml_email.subject) print('- date_str: ', eml_email.date_str) # parse .eml files from attached .eml files (2 levels of nesting) with open('/tmp/1.eml', 'rb') as f: bytes_data = f.read() msg = MailMessage.from_bytes(bytes_data) for att in msg.attachments: if '.eml' in att.filename: # 1 level .eml msg_level_1 = MailMessage.from_bytes(att.payload) print(att.filename) print('* subject: ', msg_level_1.subject) print('* date: ', msg_level_1.date) for att_sub in msg_level_1.attachments: if '.eml' in att_sub.filename: # 2 level .eml msg_level_2 = MailMessage.from_bytes(att_sub.payload) print('|--', att_sub.filename) print('| * subject: ', msg_level_2.subject) print('| * date: ', msg_level_2.date)
from imap_tools import MailMessage with open('.../attachment_2_base64.eml', 'rb') as f: bytes_data = f.read() msg = MailMessage.from_bytes(bytes_data) print(msg.date_str, msg.subject) for i, att in msg.attachments: print('-', att.filename, att.content_type, len(att.payload))