def read_ics(self, ics): """Import all :class:`items <Item>` from iCal calendar :param ics: the iCal data """ icm = icalmapi.CreateICalToMapi(self.mapiobj, self.server.ab, False) icm.ParseICal(ics, 'utf-8', 'UTC', self.store.user.mapiobj, 0) for i in range(0, icm.GetItemCount()): mapiobj = self.mapiobj.CreateMessage(None, 0) icm.GetItem(i, 0, mapiobj) _utils._save(mapiobj)
def read_ics(self, ics): """Import a complete ics calendar into the current folder :param ics: the ics file to import """ icm = icalmapi.CreateICalToMapi(self.mapiobj, self.server.ab, False) icm.ParseICal(ics, 'utf-8', '', None, 0) for i in range(0, icm.GetItemCount()): mapiobj = self.mapiobj.CreateMessage(None, 0) icm.GetItem(i, 0, mapiobj) mapiobj.SaveChanges(0)
def __init__(self, folder=None, eml=None, ics=None, vcf=None, load=None, loads=None, attachments=True, create=False, mapiobj=None, entryid=None, content_flag=None, cache={}, save=True): self._eml = None self._architem = None self._folder = None self.mapiobj = mapiobj self._entryid = entryid self._content_flag = content_flag or 0 self._cache = cache if folder: self._folder = folder self.store = folder.store self.server = folder.server if create: self.mapiobj = self.folder.mapiobj.CreateMessage(None, MAPI_ASSOCIATED if self.folder.content_flag & MAPI_ASSOCIATED else 0) self.store = self.folder.store self.server = server = self.store.server # XXX if _is_file(eml): eml = eml.read() if _is_file(ics): ics = ics.read() if _is_file(vcf): vcf = vcf.read() self._eml = eml if eml is not None: # options for CreateMessage: 0 / MAPI_ASSOCIATED dopt = inetmapi.delivery_options() inetmapi.IMToMAPI(server.mapisession, self.folder.store.mapiobj, None, self.mapiobj, self._eml, dopt) pass elif ics is not None: icm = icalmapi.CreateICalToMapi(self.mapiobj, server.ab, False) icm.ParseICal(ics, 'utf-8', 'UTC', self.user.mapiobj, 0) icm.GetItem(0, 0, self.mapiobj) elif vcf is not None: vcm = icalmapi.create_vcftomapi(self.mapiobj) vcm.parse_vcf(vcf) vcm.get_item(self.mapiobj) elif load is not None: self.load(load, attachments=attachments) elif loads is not None: self.loads(loads, attachments=attachments) else: try: container_class = HrGetOneProp(self.folder.mapiobj, PR_CONTAINER_CLASS_W).Value except MAPIErrorNotFound: self.mapiobj.SetProps([SPropValue(PR_MESSAGE_CLASS_W, u'IPM.Note')]) else: if container_class == 'IPF.Contact': # TODO just skip first 4 chars? self.mapiobj.SetProps([SPropValue(PR_MESSAGE_CLASS_W, u'IPM.Contact')]) # TODO set all default props elif container_class == 'IPF.Appointment': self.mapiobj.SetProps([SPropValue(PR_MESSAGE_CLASS_W, u'IPM.Appointment')]) # TODO set all default props!! self.from_ = self.store.user self[PidLidAppointmentStateFlags] = 1 self[PidLidResponseStatus] = 1 # TODO move appt creation to appointment.py self[PidLidFInvited] = False if save: _utils._save(self.mapiobj)
def icaltomapi(store, ab): return icalmapi.CreateICalToMapi(store, ab, False)
def __init__(self, parent=None, eml=None, ics=None, vcf=None, load=None, loads=None, attachments=True, create=False, mapiobj=None, entryid=None, content_flag=None, save=True): self.emlfile = None self._architem = None self._folder = None self.mapiobj = mapiobj self._entryid = entryid self._content_flag = content_flag or 0 if isinstance(parent, _folder.Folder): self._folder = parent self.store = parent.store self.server = parent.server elif isinstance(parent, _store.Store): self.store = store self.server = store.server if create: self.mapiobj = self.folder.mapiobj.CreateMessage( None, MAPI_ASSOCIATED if self.folder.content_flag & MAPI_ASSOCIATED else 0) self.store = self.folder.store self.server = server = self.store.server # XXX if _is_file(eml): eml = eml.read() if _is_file(ics): ics = ics.read() if _is_file(vcf): vcf = vcf.read() self.emlfile = eml if eml is not None: # options for CreateMessage: 0 / MAPI_ASSOCIATED dopt = inetmapi.delivery_options() inetmapi.IMToMAPI(server.mapisession, self.folder.store.mapiobj, None, self.mapiobj, self.emlfile, dopt) pass elif ics is not None: icm = icalmapi.CreateICalToMapi(self.mapiobj, server.ab, False) icm.ParseICal(ics, 'utf-8', '', None, 0) icm.GetItem(0, 0, self.mapiobj) elif vcf is not None: vcm = icalmapi.create_vcftomapi(self.mapiobj) vcm.parse_vcf(vcf) vcm.get_item(self.mapiobj) elif load is not None: self.load(load, attachments=attachments) elif loads is not None: self.loads(loads, attachments=attachments) else: try: container_class = HrGetOneProp(self.folder.mapiobj, PR_CONTAINER_CLASS).Value except MAPIErrorNotFound: self.mapiobj.SetProps( [SPropValue(PR_MESSAGE_CLASS_W, u'IPM.Note')]) else: if container_class == 'IPF.Contact': # XXX just skip first 4 chars? self.mapiobj.SetProps([ SPropValue(PR_MESSAGE_CLASS_W, u'IPM.Contact') ]) # XXX set default props elif container_class == 'IPF.Appointment': self.mapiobj.SetProps([ SPropValue(PR_MESSAGE_CLASS_W, u'IPM.Appointment') ]) # XXX set default props if save: self.mapiobj.SaveChanges(KEEP_OPEN_READWRITE)
def test_converticalobject_ical_null(store, ab): icm = icalmapi.CreateICalToMapi(store, ab, False) with pytest.raises(MAPIError) as excinfo: icm.ParseICal(b'', 'utf-8', '', None, 0) assert 'MAPI_E_CALL_FAILED' in str(excinfo)
def test_converticalobject_store_null(ab): with pytest.raises(MAPIError) as excinfo: icalmapi.CreateICalToMapi(None, ab, False) assert 'MAPI_E_INVALID_PARAMETER' in str(excinfo)