<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://pusto.org/mailur/feed.xml</id>
    <link href="https://pusto.org"/>
    <link href="https://pusto.org/mailur/feed.xml" ref="self"/>
    <title>None</title>
    <updated>2025-07-29T12:26:34.041134+03:00</updated>
    <author>
        <name>naspeh</name>
    </author>

    <entry xml:base="https://pusto.org/mailur/feed.xml">
        <title type="text">Feature overview</title>
        <link href="https://pusto.org/mailur/features/"/>
        <id>https://pusto.org/mailur/features/</id>
        <updated>2019-03-29T08:00:00+02:00</updated>
        <author>
            <name>naspeh</name>
        </author>
        <content type="html"><![CDATA[ <root><p>Mailur aims to create useful unique features except general features like good search, conversation view, tags. Let's try to review them here.</p>
<p><a href="https://pusto.org/mailur/features/#link-threads" id="link-threads" class="anchor">#</a></p>
<h2>Manually linking threads</h2>
<p>I fell in love with Gmail conversation view when first tried. Gmail has really great threads, but they have some limitation like<br/>
 - 100 messages in thread is maximum<br/>
 - not always messages with the same author and subject are combined in one thread</p>
<p>So I really wanted to bring Gmail like conversations into open source webmail, but I also wanted to bring a feature I've always missed in Gmail, a possibility to manually merge threads into one. This feature was initially implemented in <a href="https://pusto.org/mailur/alpha">Alpha.</a> After intensive usage over two years I realized that it changed the way I organize emails. When new email arrives in Inbox, my first reaction: "Should I put this message in existing thread?" (if it isn't already a part of some thread). I can link all invoices from one service together, link all news from another service into one thread, link almost all messages from a person I talk rarely as one conversation, etc. When next time I need to find an email I'll find not only particular email, but the full thread with all related emails. There is also ability to search through particular thread, it's really useful when I have a huge thread and I want to find a particular message in it.</p>
<p>Sometimes I want to find particular email and I can easily switch from threads view to messages view I just need to remove <code>:threads</code> from search bar.</p>
<p><img alt="link-threads.gif" src="https://pusto.org/mailur/features/link-threads.gif"/></p>
<p><a href="https://pusto.org/mailur/features/#the-split-pane" id="the-split-pane" class="anchor">#</a></p>
<h2>Independent split pane</h2>
<p>I use Vim and I always split a window vertically into two panes. I open related file for context in one pane when editing the code in another pane. I introduced two panes mode in <a href="https://pusto.org/mailur/intro">first prototype</a>, then removed it from <a href="https://pusto.org/mailur/alpha">Alpha</a> and now I repaired two panes back again and I really love them. I can write my drafts in the split pane and in the meantime, I can search a thread for context in the main pane.</p>
<p><img alt="the-split-pane.gif" src="https://pusto.org/mailur/features/the-split-pane.gif"/></p>
<p><a href="https://pusto.org/mailur/features/#markdown" id="markdown" class="anchor">#</a></p>
<h2>Writing using Markdown</h2>
<p>I love a lightweight markup language <a href="https://daringfireball.net/projects/markdown/syntax">Markdown.</a> There are many projects that <a href="https://markdown-here.com/">adding Markdown support for  Gmail and Thunderbird</a> with some limitations. Markdown is the first citizen in Mailur for composing emails. Also the main pane can be used as live preview when editing a draft in the split pane.</p>
<p><img alt="markdown.gif" src="https://pusto.org/mailur/features/markdown.gif"/></p>
<p><a href="https://pusto.org/mailur/features/#sieve-scripts" id="sieve-scripts" class="anchor">#</a></p>
<h2>Sieve scripts</h2>
<p>Gmail has pretty good filters and they can be applied for old messages as well. In open source mail usually <a href="https://tools.ietf.org/html/rfc5228">Sieve language</a> is used for email filtering, but usually <a href="https://mebsd.com/configure-freebsd-servers/dovecot-pigeonhole-sieve-filter-refilter-delivered-email.html">it's hard to apply these Sieve scripts for existing emails.</a> As I use <a href="https://pusto.org/mailur/dovecot">Dovecot as storage,</a> it has <a href="https://wiki2.dovecot.org/Pigeonhole/Sieve/Plugins/IMAPFilterSieve">IMAP FILTER=SIEVE</a> extension, so Sieve scripts can be applied not only for new emails, but also they can be run for all existing emails from interface.</p>
<p><img alt="sieve-scripts.gif" src="https://pusto.org/mailur/features/sieve-scripts.gif"/></p></root> ]]></content>
    </entry>
    <entry xml:base="https://pusto.org/mailur/feed.xml">
        <title type="text">Dovecot as main storage</title>
        <link href="https://pusto.org/mailur/dovecot/"/>
        <id>https://pusto.org/mailur/dovecot/</id>
        <updated>2019-03-05T08:00:00+02:00</updated>
        <author>
            <name>naspeh</name>
        </author>
        <content type="html"><![CDATA[ <root><p>When I posted the <a href="https://pusto.org/mailur/alpha/">"Alpha" (postgres based) version</a>, it was <a href="http://redd.it/3t07mv">a good conversation on Reddit</a>. I was thinking about IMAP support after that. I didn't want to write my own IMAP server, so I started to look closer to <a href="https://www.dovecot.org/">Dovecot</a>. After first investigation I had an idea that probably I can use Dovecot as main storage, because I didn't want to duplicate emails over Dovecot and Postgres anyway. At summer 2017 I had a chance to evaluate the idea, after some period of deep work I got <a href="https://github.com/naspeh/mailur/issues/9">a first Dovecot based prototype</a> and confidence that I can build a great webmail based on it.</p>
<h4>The hardest things to deal with:</h4>
<ul>
<li>unusual storage (limited IMAP instead of well known and powerful SQL)</li>
<li>IMAP folders instead of tags</li>
<li>I needed proper threads with ability to link them together</li>
</ul>
<h4>But at the same time it gives great features:</h4>
<ul>
<li>already a part of mail stack (often used in home-grown setup)</li>
<li>simple immutable storage, designed exactly for emails</li>
<li>a bunch of email related plugins and integrations</li>
<li>master-master replication</li>
</ul>
<p>After trying few different approaches for hardest things I got pretty flexible storage.</p>
<h2>The current storage</h2>
<p>IMAP keywords are used for system tags (like <code>#inbox</code>, <code>#spam</code> and <code>#trash</code>) and user-defined tags.</p>
<p>Just four IMAP folders for:<br/>
1. all original messages (no separate folder for Inbox, Spam or Trash)<br/>
2. all parsed messages for effective web representation<br/>
3. useful metadata (settings, linked threads, cache, etc.)<br/>
4. cleaned messages from <code>#spam</code> and <code>#trash</code> (autoexpunge in 30 days)</p>
<p>The most sensitive data is a folder with original messages and settings, parsed messages and metadata can be regenerated. <a href="https://wiki2.dovecot.org/ACL">Dovecot ACL</a> is used to deny mailbox operations, expunging messages, etc. I use Dovecot's own high-performance mailbox format <a href="https://wiki2.dovecot.org/MailboxFormat/dbox">single-dbox</a>, so emails are never changed even during applying IMAP flags on them.</p>
<p>As for now, I don't rely on Gmail as storage anymore, so the Dovecot mailboxes are only source of truth, so I should be really careful with them. I use two servers from two different datacenters with <a href="https://wiki.dovecot.org/Replication">master-master replication</a> enabled, so far it has been working pretty well.</p>
<p>From time to time, I want to check Inbox on mobile, so it has limited "general" IMAP support using <a href="https://wiki.dovecot.org/Plugins/Virtual">Dovecot virtual mailboxes</a> and filtering by <code>#inbox</code>, <code>#spam</code> and <code>#trash</code> tags. I use it with <a href="https://email.faircode.eu/">FairEmail for Android</a> for fast notifications. Mailur also has a basic mobile view.</p>
<p>As I have only one IMAP folder with all messages, it works pretty well with <a href="https://tools.ietf.org/html/rfc5228">Sieve scripts</a> using <a href="https://wiki2.dovecot.org/Pigeonhole/Sieve/Plugins/IMAPFilterSieve">IMAP FILTER=SIEVE</a>, because I don't need to move messages around and just mark them with a proper flag. Also it's easy to run them through all messages (available from UI).</p>
<p>I use <a href="https://wiki2.dovecot.org/Plugins/FTS/Lucene">Dovecot Lucene</a> for full text search indexing and it works pretty well for me.</p>
<h2>In conclusion</h2>
<p>I like the current storage and I think it should be pretty stable from that point. It has good flexibility in storing different metadata. Metadata can change over time with new features, but as I said before metadata can be easily regenerated, so it shouldn't be a problem.</p>
<p>I think I'm pretty close to my initial goal to move away from Gmail. Even I still use Gmail as a transport (importing over IMAP and sending over SMTP), but I already can remove emails from Google and I'll do this soon.</p></root> ]]></content>
    </entry>
    <entry xml:base="https://pusto.org/mailur/feed.xml">
        <title type="text">The alpha is here</title>
        <link href="https://pusto.org/mailur/alpha/"/>
        <id>https://pusto.org/mailur/alpha/</id>
        <updated>2015-11-14T08:00:00+02:00</updated>
        <author>
            <name>naspeh</name>
        </author>
        <content type="html"><![CDATA[ <root><p><strong><a href="http://demo.pusto.org">public demo</a> :: <a href="https://github.com/naspeh/mailur/">github page</a> :: <a href="https://vimeo.com/145416826">short video</a></strong></p>
<p>Mailur aims to become a powerful Gmail-inspired webmail.</p>
<p>It is already usable as an alternative Gmail client with a set of unique features:<br/>
- linking few threads together<br/>
- composing emails with <a href="https://daringfireball.net/projects/markdown/syntax">Markdown</a><br/>
- internal lightweight tabs</p>
<p><img alt="Screenshots" src="https://pusto.org/mailur/alpha/screenshots.gif"/></p>
<p>Mailur has got many changes since <a href="https://pusto.org/en/mailr/">the first intro</a>, but main points are still the same. It has been developed with simplicity in mind. It should be simple to use, to develop, to deploy and to support. It has as few dependencies as possible, at all levels. It aims to become a Gmail replacement for me in several steps.</p>
<p>The first step is already done, so I (and my wife) can use Mailur as an awesome webmail client. Bidirectional synchronization works very well: new messages appear in several seconds, manually linked threads are saved using Gmail labels. Gmail is still the main storage. I can remove all my emails from the Mailur database, run clean synchronization and get the same state again.</p>
<p>The next big step for me is preparing fault tolerance storage. This is why I chose PostgreSQL as single storage of truth (because it has <a href="https://en.wikipedia.org/wiki/ACID">ACID</a>, different ways of replication, powerful data types, full text search), so I just need a reliable PostgreSQL instance for this purpose.</p>
<p>With such a storage I would be able to prepare Private Beta for people who would want to try it, but don't want to deal with servers and installation process. Mailur uses one database per user, so moving to another instance is as simple as to make a backup and then restore it.</p>
<p>Then, I can remove my email messages from Gmail :), and use something like <a href="http://www.mailgun.com/">Mailgun</a> to receive and send messages from my own email address (I still don't want to set up and support a proper mail server with spam filters). This is a cool feature when one can change their email address but still have full access to all email messages from previous addresses and doesn't need to think about transferring these messages from one account to another.</p>
<p>Of course, I will wait a little to be confident in system's stability. Also, Mailur needs some further features, improvements and optimizations. For example, I'm going to make such things: polishing interface, filters for incoming messages, Mailgun support, some kind of mobile application with push notifications, more tests, etc.</p>
<p>I had a long pause in the development of Mailur when I was working on a commercial project accumulating some money. I came back to a nearly full-time development of this project about half a year ago. Now, I have to find a new full-time job again, because I've spent almost all the money I had accumulated before, so it means I will work on Mailur significantly less (or with pause again) in near future.</p>
<hr/>
<p>Discussion: <a href="http://redd.it/3t07mv">Reddit</a></p></root> ]]></content>
    </entry>
    <entry xml:base="https://pusto.org/mailur/feed.xml">
        <title type="text">Introducing Mailr</title>
        <link href="https://pusto.org/mailur/intro/"/>
        <id>https://pusto.org/mailur/intro/</id>
        <updated>2014-04-05T08:00:00+03:00</updated>
        <author>
            <name>naspeh</name>
        </author>
        <content type="html"><![CDATA[ <p><strong>Mailr</strong> is an Open Source webmail client with Gmail-like conversations.</p>
<p><em>Mailr is early in development. There is a lot of work, that has to be done.</em></p>
<dl class="docutils">
<dt>Technologies:</dt>
<dd><ul class="first last simple">
<li><strong>Python 3</strong> with the help of werkzeug, jinja2, sqlalchemy, lxml;</li>
<li><strong>PostgreSQL</strong> with his awesome power;</li>
<li>lessjs, jquery (yet only) on the frontend.</li>
</ul>
</dd>
</dl>
<p>I want to use minimal scope of dependencies for building Mailr. And I always want to keep
in mind simplicity when developing it.</p>
<p>Source code available on <a class="reference external" href="https://github.com/naspeh/mailr">github.</a></p>
<p>A big piece of work I did, but it’s mostly invisible part and about IMAP communication,
async synchronization, email parsing. The visible part is some working interface. There is
<a class="reference external" href="http://demo.pusto.org">public demo</a>, which works pretty fast (and yep, it is not available to compose email
yet). You can send email to <strong>demo[at]pusto.org</strong> and it probably appears in Inbox.</p>
<div class="section" id="screenshot">
<h1>Screenshot</h1>
<img alt="screenshot-s.png" src="https://pusto.org/mailur/intro/screenshot-s.png"/>
</div>
<div class="section" id="vision-of-first-version">
<h1>Vision of first version</h1>
<p>Mailr will have web interface, which will be fast and useful on laptop with small screen,
on big monitor and on iPad Mini (these devices I have and I want a one customizable web
interface for them).</p>
<p>Mailr will have Gmail compatible mode (through IMAP), so return to Gmail will be easy. I
will also not plan to implement a phone version and this mode can be used in parallel with
any phone client which connects to Gmail as usual. That is also easier to develop using
Gmail as the first backend.</p>
<p>Mailr will have many features from Gmail, such as: useful conversations, labels, fast
search, filters for sorting incoming messages, detecting and folding quotes, keyboard
shortcuts, SSL support…</p>
<p>Also Mailr will have some additional features.</p>
<p><strong>Merging conversations.</strong> I really like Gmail conversations, they have made the best
implementation (I have tried many others, when I wanted to move away from Gmail). Google
are matching well which message belongs to which tread, but sometimes they can’t match:</p>
<img alt="unmatched-thread.png" src="https://pusto.org/mailur/intro/unmatched-thread.png"/>
<p>I think possibility to merge it manually is a good solution in such cases.</p>
<p><strong>Write in Markdown.</strong> I like <a class="reference external" href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> and <a class="reference external" href="http://en.wikipedia.org/wiki/ReStructuredText">reStructuredText</a> and I want to use them for
writing my emails. They are also useful for reading after converting to HTML.</p>
<p><strong>Two panels.</strong> I really like two panel mode in my VIM(text editor), I started using them
and now I feel uncomfortable in one panel editor. Second panel gives me more context when
I write in another one. This feature is in progress, as you can see on the screenshot. But
I need to implement a possibility to turn that feature off, because I understand, that not
all people would like it.</p>
<p><strong>Customizable interface.</strong> As I said Mailr will be useful in different resolutions and
custom themes and settings for interface will solve this task.</p>
<p><strong>All in one tab.</strong> I use Chrome and I like that “Settings”, “Downloads”, “Extensions”
just open in new tabs instead of new windows (I used Firefox before and it has been using
new separated windows for those things). I really like consistent user interface. All my
surfing lives in one window and I want all my emails would probably live in one tab (that
also means different accounts, but multiple accounts probably will appear after the first
version).</p>
<p><strong>Simple backup.</strong> Mailr will have ability to get all your data (including accounts,
filters, etc.) and restore it on your own server or on secure server of your trusted
friend.</p>
</div>
<div class="section" id="next-versions">
<h1>Next versions</h1>
<p>After I’m able to use Mailr with Gmail as backend I want to get the possibility to move
away from Gmail and to switch on my own email address, that mean I probably add support
<a class="reference external" href="http://www.mailgun.com/">Mailgun</a> (it is a hard way to support your own mail server with spam filter, so Mailgun
is easier way to get my own email and they don’t save emails in their servers).</p>
<p>Then there are many things to keep in mind such as multiple accounts, support other IMAP
servers, PGP encryption, mailinglists…</p>
</div>
<div class="section" id="p-s">
<h1>P.S.</h1>
<p>I have been working intensively for about last two months on Mailr, but my long vacation
is ending soon and I will probably spend a little time on Mailr later. Anyway I will try
to implement the first version one day.</p>
<hr class="docutils"/>
<p>Discussion: <a class="reference external" href="http://redd.it/22bvy4">Reddit</a> and <a class="reference external" href="https://news.ycombinator.com/item?id=7540887">Hacker News</a></p>
</div>
 ]]></content>
    </entry>
</feed>