def check_user_imap_object(self, mailbox, uid=None, type='event'): imap = IMAP() imap.connect() mailbox = imap.folder_quote(mailbox) imap.set_acl(mailbox, "cyrus-admin", "lrs") imap.imap.m.select(mailbox) found = None retries = 15 while not found and retries > 0: retries -= 1 typ, data = imap.imap.m.search(None, '(UNDELETED HEADER SUBJECT "%s")' % (uid) if uid else '(UNDELETED HEADER X-Kolab-Type "application/x-vnd.kolab.' + type + '")') for num in data[0].split(): typ, data = imap.imap.m.fetch(num, '(RFC822)') object_message = message_from_string(data[0][1]) # return matching UID or first event found if uid and object_message['subject'] != uid: continue if type == 'task': found = todo_from_message(object_message) else: found = event_from_message(object_message) if found: break time.sleep(1) return found
def check_resource_calendar_event(self, mailbox, uid=None): imap = IMAP() imap.connect() imap.set_acl(mailbox, "cyrus-admin", "lrs") imap.imap.m.select(imap.folder_quote(mailbox)) found = None retries = 10 while not found and retries > 0: retries -= 1 typ, data = imap.imap.m.search(None, '(UNDELETED HEADER SUBJECT "%s")' % (uid) if uid else '(UNDELETED HEADER X-Kolab-Type "application/x-vnd.kolab.event")') for num in data[0].split(): typ, data = imap.imap.m.fetch(num, '(RFC822)') event_message = message_from_string(data[0][1]) # return matching UID or first event found if uid and event_message['subject'] != uid: continue found = event_from_message(event_message) if found: break time.sleep(1) imap.disconnect() return found
def check_message_received(self, subject, from_addr=None, mailbox=None): if mailbox is None: mailbox = self.john['mailbox'] imap = IMAP() imap.connect() mailbox = imap.folder_quote(mailbox) imap.set_acl(mailbox, "cyrus-admin", "lrs") imap.imap.m.select(mailbox) found = None retries = 15 while not found and retries > 0: retries -= 1 typ, data = imap.imap.m.search(None, '(UNDELETED HEADER FROM "%s")' % (from_addr) if from_addr else 'UNDELETED') for num in data[0].split(): typ, msg = imap.imap.m.fetch(num, '(RFC822)') message = message_from_string(msg[0][1]) if message['Subject'] == subject: found = message break time.sleep(1) imap.disconnect() return found
def update_calendar_event(self, uid, start=None, summary=None, sequence=0, user=None): if user is None: user = self.john event = self.check_user_calendar_event(user['kolabcalendarfolder'], uid) if event: if start is not None: event.set_start(start) if summary is not None: event.set_summary(summary) if sequence is not None: event.set_sequence(sequence) imap = IMAP() imap.connect() mailbox = imap.folder_quote(user['kolabcalendarfolder']) imap.set_acl(mailbox, "cyrus-admin", "lrswipkxtecda") imap.imap.m.select(mailbox) return imap.imap.m.append( mailbox, None, None, event.to_message().as_string() ) return False
def create_task_assignment(self, due=None, summary="test", sequence=0, user=None, attendees=None): if due is None: due = datetime.datetime.now(pytz.timezone("Europe/Berlin")) + datetime.timedelta(days=2) if user is None: user = self.john if attendees is None: attendees = [self.jane] todo = pykolab.xml.Todo() todo.set_due(due) todo.set_organizer(user['mail'], user['displayname']) for attendee in attendees: todo.add_attendee(attendee['mail'], attendee['displayname'], role="REQ-PARTICIPANT", participant_status="NEEDS-ACTION", rsvp=True) todo.set_summary(summary) todo.set_sequence(sequence) imap = IMAP() imap.connect() mailbox = imap.folder_quote(user['kolabtasksfolder']) imap.set_acl(mailbox, "cyrus-admin", "lrswipkxtecda") imap.imap.m.select(mailbox) result = imap.imap.m.append( mailbox, None, None, todo.to_message().as_string() ) return todo.get_uid()
def purge_mailbox(self, mailbox): imap = IMAP() imap.connect() imap.set_acl(mailbox, "cyrus-admin", "lrwcdest") imap.imap.m.select(imap.folder_quote(mailbox)) typ, data = imap.imap.m.search(None, 'ALL') for num in data[0].split(): imap.imap.m.store(num, '+FLAGS', '\\Deleted') imap.imap.m.expunge() imap.disconnect()
def create_calendar_event(self, start=None, summary="test", sequence=0, user=None, attendees=None, folder=None): if start is None: start = datetime.datetime.now(pytz.timezone("Europe/Berlin")) if user is None: user = self.john if attendees is None: attendees = [self.jane] if folder is None: folder = user['kolabcalendarfolder'] end = start + datetime.timedelta(hours=4) event = pykolab.xml.Event() event.set_start(start) event.set_end(end) event.set_organizer(user['mail'], user['displayname']) for attendee in attendees: event.add_attendee(attendee['mail'], attendee['displayname'], role="REQ-PARTICIPANT", participant_status="NEEDS-ACTION", rsvp=True) event.set_summary(summary) event.set_sequence(sequence) # create event with attachment vattach = event.get_attachments() attachment = kolabformat.Attachment() attachment.setLabel('attach.txt') attachment.setData('This is a text attachment', 'text/plain') vattach.append(attachment) event.event.setAttachments(vattach) imap = IMAP() imap.connect() mailbox = imap.folder_quote(folder) imap.set_acl(mailbox, "cyrus-admin", "lrswipkxtecda") imap.imap.m.select(mailbox) result = imap.imap.m.append( mailbox, None, None, event.to_message().as_string() ) return event.get_uid()