From f4302025ddfab3e59e252f36ee49ba8b348fd8f1 Mon Sep 17 00:00:00 2001 From: Dominik Chilla Date: Mon, 31 Dec 2018 17:21:01 +0100 Subject: [PATCH] New resource: QuarMailRelease GulagMailbox:add_message() returns imap_uid --- app/Gulag.py | 6 +++++- app/GulagMailbox.py | 12 ++++++++++-- app/Resources.py | 12 ++++++++++++ db/gulag.sql | 21 +++++++++++++-------- 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/app/Gulag.py b/app/Gulag.py index 7c6ecaf..9c9541a 100644 --- a/app/Gulag.py +++ b/app/Gulag.py @@ -536,7 +536,11 @@ class Gulag: imap_mb = None try: imap_mb = IMAPmailbox(mailbox) - imap_mb.add_message(msg) + imap_uid = imap_mb.add_message(msg, unseen=True) + logging.info(whoami(self) + "IMAP_UID: " + str(imap_uid)) imap_mb.close() except IMAPmailboxException as e: raise GulagException(whoami(self) + e.message) from e + + def release_quarmail(self,args): + pass diff --git a/app/GulagMailbox.py b/app/GulagMailbox.py index 5622895..31e5ad0 100644 --- a/app/GulagMailbox.py +++ b/app/GulagMailbox.py @@ -2,6 +2,7 @@ import imaplib import email import email.header import time +import re from GulagUtils import whoami class IMAPmailboxException(Exception): @@ -61,10 +62,13 @@ class IMAPmailbox: }) return results - def add_message(self,message): + def add_message(self,message,unseen=False): + flags = '' + if(unseen == True): + flags = 'UNSEEN' rv, data = self.mailbox.append( self.imap_mailbox, - 'UNSEEN', + flags , imaplib.Time2Internaldate(time.time()), str(message).encode('utf-8') ) @@ -72,6 +76,10 @@ class IMAPmailbox: raise IMAPmailboxException(whoami(self)+ "ERROR appending message: " + rv ) + p = re.compile(r'^\[APPENDUID\s+\d+\s+(\d+)\].+$') + m = p.search(data[0].decode()) + imap_uid = m.group(1) + return imap_uid def get_message(self,imap_uid): rv, data = self.mailbox.uid('FETCH', str(imap_uid), '(RFC822)') diff --git a/app/Resources.py b/app/Resources.py index 2dd40a3..6212fb5 100644 --- a/app/Resources.py +++ b/app/Resources.py @@ -81,6 +81,18 @@ class ResQuarMail(GulagResource): except GulagException as e: abort(500, message=e.message) +class ResQuarMailRelease(GulagResource): + def get(self,quarmail_id): + args = {"quarmail_id": quarmail_id} + if(request.args.get('purge')): + args['purge'] = True + try: + return self.gulag.release_quarmail(args) + except GulagNotFoundException as e: + abort(404, message=e.message) + except GulagException as e: + abort(500, message=e.message) + class ResQuarMailAttachments(GulagResource): def get(self,quarmail_id): args = {"quarmail_id": quarmail_id} diff --git a/db/gulag.sql b/db/gulag.sql index fec328d..9c9fe45 100644 --- a/db/gulag.sql +++ b/db/gulag.sql @@ -2,6 +2,16 @@ create database Gulag; use Gulag; +create table SMTPrelays( + id varchar(64) not null primary key, + smtp_server varchar(256) default '127.0.0.1' collate 'ascii_general_ci', + smtp_port smallint unsigned not null default 25, + smtp_security varchar(32) not null default 'plain', + smtp_user varchar(256) default null, + smtp_pass varchar(1024) default null, + comment varchar(256) default null +)ENGINE = InnoDB; + create table Mailboxes( email_address varchar(767) not null primary key collate 'ascii_general_ci', name varchar(256) not null, @@ -9,19 +19,14 @@ create table Mailboxes( imap_port smallint unsigned not null default 143, imap_security varchar(32) not null default 'plain', imap_user varchar(256) not null, - imap_pass varchar(256) not null, + imap_pass varchar(1024) not null, imap_mailbox varchar(256) not null default 'INBOX', imap_mailbox_fp varchar(256) not null default 'false-positives', imap_separator varchar(4) not null default '/', - smtp_server varchar(256) default null, - smtp_port smallint unsigned not null default 25, - smtp_security varchar(32) not null default 'plain', - smtp_user varchar(256) default null, - smtp_pass varchar(2048) default null, comment varchar(256) default null )ENGINE = InnoDB; -insert into Mailboxes (email_address,name,imap_user,imap_pass) - values('quarantine-sandbox@example.org','E-Mail sandbox quarantine','quarantine-sb','quarantine-sb_secure_password'); +insert into Mailboxes (email_address,name,imap_user,imap_pass) + values('quarantine@example.org','E-Mail inbound quarantine','quarantine','quarantine_secure_password'); create table QuarMails ( id int unsigned auto_increment primary key,