def add_message(sender, recipients, body, message): sql = """ INSERT INTO message (sender, recipients, subject, source, type, size, created_at) VALUES (?, ?, ?, ?, ?, ?, datetime('now')) """ all_recipients = { 'to': [decode_header(recipient) for recipient in recipients], 'cc': split_addresses(decode_header(message['CC'])) if 'CC' in message else [], 'bcc': split_addresses(decode_header(message['BCC'])) if 'BCC' in message else [] } cur = _conn.cursor() cur.execute(sql, (decode_header(sender), json.dumps(all_recipients), decode_header(message['Subject']), body, message.get_content_type(), len(body))) message_id = cur.lastrowid # Store parts (why do we do this for non-multipart at all?!) parts = 0 for part in iter_message_parts(message): cid = part.get('Content-Id') or str(uuid.uuid4()) if cid[0] == '<' and cid[-1] == '>': cid = cid[1:-1] _add_message_part(message_id, cid, part) parts += 1 _conn.commit() cur.close() log.debug('Stored message {0} (parts={1})'.format(message_id, parts)) broadcast('add_message', message_id) return message_id
def delete_message(message_id): _conn.execute('DELETE FROM message WHERE id = ?', (message_id, )) _conn.execute('DELETE FROM message_part WHERE message_id = ?', (message_id, )) _conn.commit() log.debug('Deleted message {0}'.format(message_id)) broadcast('delete_message', message_id)
def add_message(sender, recipients, body, message): sql = """ INSERT INTO message (sender, recipients, subject, source, type, size, created_at) VALUES (?, ?, ?, ?, ?, ?, datetime('now')) """ cur = _conn.cursor() cur.execute(sql, (sender, json.dumps(recipients), message['Subject'], body, message.get_content_type(), len(body))) message_id = cur.lastrowid # Store parts (why do we do this for non-multipart at all?!) parts = [message] if not message.is_multipart() else message.get_payload() for part in parts: cid = part.get('Content-Id') or str(uuid.uuid4()) if cid[0] == '<' and cid[-1] == '>': cid = cid[1:-1] _add_message_part(message_id, cid, part) _conn.commit() cur.close() log.debug('Stored message {0} (parts={1})'.format(message_id, len(parts))) broadcast('add_message', message_id) return message_id
def add_message(sender, recipients, body, message): sql = """ INSERT INTO message (sender, recipients, subject, source, type, size, created_at) VALUES (?, ?, ?, ?, ?, ?, datetime('now')) """ all_recipients = {'to': map(decode_header, recipients), 'cc': split_addresses(decode_header(message['CC'])) if 'CC' in message else [], 'bcc': split_addresses(decode_header(message['BCC'])) if 'BCC' in message else []} cur = _conn.cursor() cur.execute(sql, (decode_header(sender), json.dumps(all_recipients), decode_header(message['Subject']), body, message.get_content_type(), len(body))) message_id = cur.lastrowid # Store parts (why do we do this for non-multipart at all?!) parts = 0 for part in iter_message_parts(message): cid = part.get('Content-Id') or str(uuid.uuid4()) if cid[0] == '<' and cid[-1] == '>': cid = cid[1:-1] _add_message_part(message_id, cid, part) parts += 1 _conn.commit() cur.close() log.debug('Stored message {0} (parts={1})'.format(message_id, parts)) broadcast('add_message', message_id) return message_id
def delete_messages(): _conn.execute('DELETE FROM message') _conn.execute('DELETE FROM message_part') _conn.commit() log.debug('Deleted all messages') broadcast('delete_messages')
def delete_message(message_id): _conn.execute('DELETE FROM message WHERE id = ?', (message_id,)) _conn.execute('DELETE FROM message_part WHERE message_id = ?', (message_id,)) _conn.commit() log.debug('Deleted message {0}'.format(message_id)) broadcast('delete_message', message_id)