CINXE.COM
FOSDEM 2024 - [Protocols] Things we wish we knew before starting an IMAP library
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head profile="http://a9.com/-/spec/opensearch/1.1/" prefix="og: http://ogp.me/ns#"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="generator" content="nanoc"/> <link rel="apple-touch-icon" sizes="120x120" href="/2024/apple-touch-icon.png" /> <link rel="icon" type="image/png" href="/2024/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="/2024/favicon-16x16.png" sizes="16x16" /> <link rel="manifest" href="/2024/manifest.json" /> <link rel="mask-icon" href="/2024/safari-pinned-tab.svg" color="#af2c93" /> <meta name="msapplication-TileColor" content="#af2c93"/> <meta name="theme-color" content="#ffffff" /> <link media="all" rel="stylesheet" type="text/css" href="/2024/assets/style/fosdem-3809132dc1880e542cab6467c6a20482269835fd4b4e25cbf780ba5930f552ae.css" /> <link href="/2024/atom.xml" type="application/atom+xml" rel="alternate" title="FOSDEM 2024 ATOM Feed"/> <link href="/2024/rss.xml" type="application/rss+xml" rel="alternate" title="FOSDEM 2024 RSS Feed"/> <link href="/2024/opensearch.xml" type="application/opensearchdescription+xml" title="FOSDEM 2024 Search"/> <title>FOSDEM 2024 - [Protocols] Things we wish we knew before starting an IMAP library</title> <link rel="schema.DC" href="http://purl.org/DC/elements/1.0/" /> <meta name="DC.Title" content="[Protocols] Things we wish we knew before starting an IMAP library"/> <meta name="DC.Format" content="text/html" /> <meta name="DC.Language" content="en" /> <meta name="DC.Subject" content="FOSDEM 2024" /> <meta name="DC.Rights" content="http://creativecommons.org/licenses/by-sa/2.0/be/" /> <meta property="og:title" content="FOSDEM 2024 - [Protocols] Things we wish we knew before starting an IMAP library" /> <meta property="og:type" content="website" /> <meta property="og:image" content="https://fosdem.org/2024/assets/style/logo-gear-7204a6874eb0128932db10ff4030910401ac06f4e907f8b4a40da24ba592b252.png" /> </head> <body class="schedule-event"> <div id="header"> <div class="header-holder"> <h1 class="logo"><a href="/2024/">fosdem-2024</a></h1> <ul id="nav"> <li class="home"><a href="/2024/">Home</a></li> <li><a href="/2024/about/">About</a></li> <li><a href="/2024/news/">News</a></li> <li class="active"><a href="/2024/schedule/">Schedule</a></li> <li><a href="/2024/stands/">Stands</a></li> <li><a href="/2024/volunteer/">Volunteer</a></li> <li><a href="/2024/practical/">Practical</a></li> </ul> <!-- #nav --> </div> <!-- .header-holder --> </div> <!-- #header --> <div class="title-box"> <div class="holder"> <div class="frame"> <div class="text-block"> <h2>Brussels <span>/</span> <strong>3 & 4 February 2024</strong></h2> <a class="btn-purple" href="/2024/schedule/">schedule</a> </div> <ul class="navbar"> <li><a href="/2024/news/">News</a></li> <li><a href="/2024/about/sponsors/">Sponsors</a></li> <li><a href="/2024/contact/">Contact</a></li> </ul> </div> </div> </div> <!-- .title-box --> <div id="main"> <ul class="breadcrumbs"> <li><a href="/2024/">FOSDEM 2024</a></li><li class="separator">/</li><li><a href="/2024/schedule/">Schedule</a></li><li class="separator">/</li><li><a href="/2024/schedule/events/">Events</a></li><li class="separator">/</li><li>Developer rooms</li><li class="separator">/</li><li><a href="/2024/schedule/track/modern-email/">Modern Email</a></li><li class="separator">/</li><li class="active">[Protocols] Things we wish we knew before starting an IMAP library</li> </ul> <div id="pagetitles"> <h1>[Protocols] Things we wish we knew before starting an IMAP library</h1> <h2></h2> </div> <ul class="side-box"> <li><i class="icon-road"></i> <strong>Track</strong>: <a href="/2024/schedule/track/modern-email/">Modern Email devroom</a></li> <li><i class="icon-home"></i> <strong>Room</strong>: <a href="/2024/schedule/room/h2213/">H.2213</a></li> <li><i class="icon-calendar"></i> <strong>Day</strong>: <a href="/2024/schedule/day/sunday/">Sunday</a></li> <li><i class="icon-play"></i> <strong>Start</strong>: <a class="value-title" title="2024-02-04T09:25:00+01:00" href="/2024/schedule/day/sunday/#0925">09:25</a></li> <li><i class="icon-stop"></i> <strong>End</strong>: <a class="value-title" title="2024-02-04T10:00:00+01:00" href="/2024/schedule/day/sunday/#1000">10:00</a></li> <li id="live-stream-with-q-and-a" class="visible-desktop"> <i class="icon-film"></i> <strong>Video only</strong>: <a href="https://live.fosdem.org/watch/h2213">h2213</a> </li> <li> <i class="icon-comment"></i> <strong>Chat</strong>: <a href="https://chat.fosdem.org/#/room/#2024-h.2213:fosdem.org">Join the conversation!</a> </li> </ul> <br style="clear: both;"/> <div class="event-blurb"> <div class="event-abstract"><p>IMAP is a lot. It's a stateful protocol that doesn't lend itself to a simple implementation and can be intimidating. IMAP's syntax is branched, subtle, and has various issues. Above that, the syntax is intertwined with business logic, making separating concerns difficult. It doesn't help either that there are more than 70 extensions, with any of them potentially breaking your understanding of how IMAP operates.</p> <p>In this talk, Simon and Damian recapitulate what they learned about IMAP while implementing/maintaining <a href="https://github.com/emersion/go-imap">go-imap</a> and <a href="https://github.com/duesee/imap-codec">imap-codec</a>.</p> <p>After the talk, you will have a much better understanding of IMAP and, hopefully, will avoid making the same mistakes we made.</p> <h1>About the speaker(s)</h1> <p>Simon started writing go-imap v1 7 years ago. Of course, misunderstandings happened, and mistakes were made. Thus, he started working on go-imap v2 earlier this year to fix these mistakes and design a better API informed on everything he learned while maintaining this library.</p> <p>Damian started imap-codec during a STARTTLS research project. imap-codec was born out of frustration. He struggled to construct syntactically valid IMAP messages while analyzing IMAP clients for a specific behavior. imap-codec helped to prevent the same errors from being made twice.</p></div> <div class="event-description"></div> </div> <div class="video"> <video preload="none" controls="controls" width="75%"> <source src="https://video.fosdem.org/2024/h2213/fosdem-2024-2647--protocols-things-we-wish-we-knew-before-starting-an-imap-library.av1.webm" type='video/webm; codecs="av01.0.08M.08.0.110.01.01.01.0"' /> <source src="https://video.fosdem.org/2024/h2213/fosdem-2024-2647--protocols-things-we-wish-we-knew-before-starting-an-imap-library.mp4" type='video/mp4' /> </video> </div> <h3>Speakers</h3> <table> <tbody> <tr> <td><a href="/2024/schedule/speaker/TDHQA9/"><img class="thumb" height="32" width="32" src="/2024/schedule/speaker/TDHQA9/f131b952594db0673f1b16eda033bdbfbed154e9ef9da3b12c71ab20a545bc03.jpg" alt="Photo of Damian Poddebniak"/></a></td> <td><a href="/2024/schedule/speaker/TDHQA9/">Damian Poddebniak</a></td> </tr> <tr> <td><a href="/2024/schedule/speaker/LVHRQN/"><img class="thumb" height="32" width="32" src="/2024/schedule/speaker/LVHRQN/354a7ed0c623894117bb34cb8ad70dd3170adf040ad72d4136805a64753c099d.png" alt="Photo of Simon Ser"/></a></td> <td><a href="/2024/schedule/speaker/LVHRQN/">Simon Ser</a></td> </tr> </tbody> </table> <h3>Links</h3> <ul> <li><a href="https://video.fosdem.org/2024/h2213/fosdem-2024-2647--protocols-things-we-wish-we-knew-before-starting-an-imap-library.mp4">Video recording (mp4)</a></li> <li><a href="https://video.fosdem.org/2024/h2213/fosdem-2024-2647--protocols-things-we-wish-we-knew-before-starting-an-imap-library.av1.webm">Video recording (AV1/opus)</a></li> <li><a href="https://chat.fosdem.org/#/room/#2024-h.2213:fosdem.org">Chat room(web)</a></li> <li><a href="https://matrix.to/#/#2024-h.2213:fosdem.org?web-instance[element.io]=chat.fosdem.org">Chat room(app)</a></li> <li><a href="https://pretalx.fosdem.org/fosdem-2024/talk/NRKJYR/feedback/">Submit Feedback</a></li> </ul> </div> <!-- #main --> <div id="footer"> <div class="footer-holder"> <div class="panel-block"> <div class="panel-column"> <h3>FOSDEM</h3> <ul class="panel"> <li class="home"><a accesskey="1" href="/2024/">Home</a></li> <li><a accesskey="2" href="/2024/news/">News</a></li> <li><a href="/2024/about/">About</a></li> <li><a href="/2024/about/sponsors/">Sponsors</a></li> <li><a href="/2024/support/donate/">Donate</a></li> <li><a accesskey="5" href="/2024/faq/">FAQ</a></li> <li><a href="/2024/archives/">Archives</a></li> </ul> </div> <!-- .panel-column --> <div class="panel-column"> <h3>This year</h3> <ul class="panel"> <li><a accesskey="s" href="/2024/schedule/">Schedule</a></li> <li><a href="/2024/stands/">Stands</a></li> <li><a href="/2024/certification/">Certification exams</a></li> <li><a href="/2024/volunteer/">Volunteer</a></li> <li><a href="/2024/fringe/">Fringe</a></li> </ul> </div> <!-- .panel-column --> <div class="panel-column"> <h3>Practical information</h3> <ul class="panel"> <li><a href="/2024/practical/accessibility/">Accessibility</a></li> <li><a href="/2024/practical/conduct/">Code of Conduct</a></li> <li><a href="/2024/practical/services/">During the Event</a></li> <li><a href="/2024/practical/covid/">COVID-19 policy</a></li> </ul> </div> <!-- .panel-column --> <div class="panel-column"> <h3>Media and press</h3> <ul class="panel"> <li><a href="/2024/social/">Social media</a></li> </ul> </div> <!-- .panel-column --> </div> <!-- .panel-block --> <div class="company-info"> <div class="company-info-logo"></div> <strong class="logo-small"><a href="/2024/schedule/">fosdem-2024</a></strong> <p>Brussels <span>/</span> <strong>3 & 4 February 2024</strong></p> </div> <div class="license-info"> <div class="license-info-logo"></div> This work is licensed under the Creative Commons Attribution 2.0 Belgium Licence.<br/> To view a copy of this licence, visit <a class="quiet" rel="license" href="http://creativecommons.org/licenses/by/2.0/be/deed.en">http://creativecommons.org/licenses/by/2.0/be/deed.en</a><br/> or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.<br /> All content such as talks and biographies is the sole responsibility of the speaker. </div> </div> </div> </body> </html>