New resource: QuarMailRelease

GulagMailbox:add_message() returns imap_uid
This commit is contained in:
Dominik Chilla 2018-12-31 17:21:01 +01:00
parent b9696b4e83
commit f4302025dd
4 changed files with 40 additions and 11 deletions

View File

@ -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

View File

@ -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)')

View File

@ -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}

View File

@ -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,