introduction to kopano
play

Introduction to Kopano Jelle van der Waa 1 / 22 www.kopano.com $ - PowerPoint PPT Presentation

www.kopano.com Introduction to Kopano Jelle van der Waa 1 / 22 www.kopano.com $ whoami Developer @ Kopano Arch Linux Developer jelle@vdwaa.nl / j.vanderwaa@kopano.com @jelly @jvdwaa 2 / 22 www.kopano.com Introduction Open


  1. www.kopano.com Introduction to Kopano Jelle van der Waa 1 / 22

  2. www.kopano.com $ whoami Developer @ Kopano Arch Linux Developer  jelle@vdwaa.nl / j.vanderwaa@kopano.com  @jelly  @jvdwaa 2 / 22

  3. www.kopano.com Introduction Open source communication, collaboration and sharing platform Email, video, calendaring, tasks, notes and file sharing Fork of Zarafa Implements the MAPI Specification AGPLv3 3 / 22

  4. www.kopano.com Architecture (clients) IMAP / POP3 / CalDav support ActiveSync for mobile devices / OL (13 and higher) Our own web and desktop client plugin support for web / desktop client 4 / 22

  5. www.kopano.com Architecture (backend) Use of any MTA possible MySQL as MAPI storage db Various user backends: LDAP, AD, DB, Unix Attachments on disk or S3 based (protocol) Multi-server architecture 5 / 22

  6. www.kopano.com Architecture (backend) All data is stored as MAPI objects Bindings for C++, PHP, Python for MAPI Clients Conversion to eml, vcf, ics to and from MAPI SOAP for transport Does not implement the DCE/RPC, MAPI/HTTP or "Outlook anywhere" 6 / 22

  7. www.kopano.com Z-Push Open Source ActiveSync implementation Sync mail, calender, contacts and tasks to    Written in PHP (uses PHP-mapi extension) Supports multiple backends (Kopano, Maildir, Vcard, IMAP) Kopano Outlook Extension (KOE) - Extends the feature-set of OL's ActiveSync Implementation http://z-push.org https://stash.z-hub.io/projects/ZP/repos/z-push/browse https://stash.kopano.io/projects/KOE/repos/kopano_ol_extension_source/browse 7 / 22

  8. www.kopano.com MAPI (Objects) Store └── Folder └── Item └── Attachment Proptag Proptype Value PR_SUBJECT PT_STRING 'hello' PR_HASATTACH PT_BOOLEAN False PR_CREATION_TIME PT_SYSTIME 2017-01-26 10:26:22 PR_MESSAGE_FLAGS PT_LONG 8 PR_SUBJECT = PROP_TAG( PT_TSTRING, 0x0037) mapiobj.SetProps([SPropValue(PR_SUBJECT, 'subject')], 0) mapiobj.GetProps([PR_SUBJECT], 0) 8 / 22

  9. www.kopano.com MAPI (Good parts) T echnology from ~ '80, still developed Extensible ICS framework (Incremental change synchronisation) 9 / 22

  10. www.kopano.com MAPI (Bad parts) Hard to grasp Low-level Documentation Legacy 10 / 22

  11. www.kopano.com Python-kopano 2 years ago started hacking on a high level Python API Acts as a MAPI client Abstracts MAPI Easy to interface T ools / programs built on top of it Examples: Search Backup Spam learning daemon Debugging tools Functional tests https://stash.kopano.io/projects/KSC/repos/lab-scripts/browse/python- kopano https://stash.kopano.io/projects/KSC/repos/kopano-spamd/browse 11 / 22

  12. www.kopano.com MAPI Example (email) session = OpenECSession('user1','pass',os.getenv('KOPANO_SOCKET')) 12 / 22

  13. www.kopano.com MAPI Example (email) session = OpenECSession('user1','pass',os.getenv('KOPANO_SOCKET')) store = GetDefaultStore(session) outboxid = HrGetOneProp(store, PR_IPM_OUTBOX_ENTRYID).Value outbox = store.OpenEntry(outboxid, None , MAPI_MODIFY) 13 / 22

  14. www.kopano.com MAPI Example (email) session = OpenECSession('user1','pass',os.getenv('KOPANO_SOCKET')) store = GetDefaultStore(session) outboxid = HrGetOneProp(store, PR_IPM_OUTBOX_ENTRYID).Value outbox = store.OpenEntry(outboxid, None , MAPI_MODIFY) message = outbox.CreateMessage( None , 0) 14 / 22

  15. www.kopano.com MAPI Example (email) session = OpenECSession('user1','pass',os.getenv('KOPANO_SOCKET')) store = GetDefaultStore(session) outboxid = HrGetOneProp(store, PR_IPM_OUTBOX_ENTRYID).Value outbox = store.OpenEntry(outboxid, None , MAPI_MODIFY) message = outbox.CreateMessage( None , 0) message.ModifyRecipients(0, [[SPropValue(PR_RECIPIENT_TYPE, MAPI_TO), SPropValue(PR_DISPLAY_NAME, 'Jelle van der Waa'), SPropValue(PR_EMAIL_ADDRESS_A, 'j.vanderwaa@kopano.com') ]]) message.SetProps([SPropValue(PR_SUBJECT, 'hello fosdem'), SPropValue(PR_BODY, 'empty body!')]) 15 / 22

  16. www.kopano.com MAPI Example (email) session = OpenECSession('user1','pass',os.getenv('KOPANO_SOCKET')) store = GetDefaultStore(session) outboxid = HrGetOneProp(store, PR_IPM_OUTBOX_ENTRYID).Value outbox = store.OpenEntry(outboxid, None , MAPI_MODIFY) message = outbox.CreateMessage( None , 0) message.ModifyRecipients(0, [[SPropValue(PR_RECIPIENT_TYPE, MAPI_TO), SPropValue(PR_DISPLAY_NAME, 'Jelle van der Waa'), SPropValue(PR_EMAIL_ADDRESS_A, 'j.vanderwaa@kopano.com') ]]) message.SetProps([SPropValue(PR_SUBJECT, 'hello fosdem'), SPropValue(PR_BODY, 'empty body!')]) message.SubmitMessage(0) 16 / 22

  17. www.kopano.com Python-kopano Example (e-mail) import kopano server = kopano.Server(auth_user='user1', auth_pass='user1') user = server.user('user1') 17 / 22

  18. www.kopano.com Python-kopano Example (e-mail) import kopano server = kopano.Server(auth_user='user1', auth_pass='user1') user = server.user('user1') # Send e-mail user.outbox.create_item(subject='hello fosdem', body='empty body!', to='jelle van der Waa <j.vanderwaa@kopano.com>').send() 18 / 22

  19. www.kopano.com Python-kopano Example # access MAPI property item = next(user.inbox.items()) item.subject = 'new subject' # Iterate users for user in server.users(): print(user) print(user.enabled) print(user.outofoffice.enabled) # Search! for item in user.inbox.search('hello'): print(item) # Low-level possible item.mapiobj.GetProps([PR_SUBJECT], 0) 19 / 22

  20. www.kopano.com Downstream Debian - process of getting into Debian https://wiki.debian.org/groupware/kopano OpenSUSE - build service repository https://build.opensuse.org/project/show/server:mail:kopano 20 / 22

  21. www.kopano.com Conclusion Main website https://kopano.io Packages https://download.kopano.io/community/ Git https://stash.kopano.io  https://github.com/Kopano-mirror/ 21 / 22

  22. www.kopano.com Questions 22 / 22

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend