Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
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)
Exemple #4
0
def icaltomapi(store, ab):
    return icalmapi.CreateICalToMapi(store, ab, False)
Exemple #5
0
    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)