<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Colas.Nahaboo.net - email</title>
    <subtitle>Colas Nahaboo personal site, with discussions about programming code, web and computing topics, surfing and SUPing, and various musings.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://colas.nahaboo.net/tags/email/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://colas.nahaboo.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-03T00:00:00+00:00</updated>
    <id>https://colas.nahaboo.net/tags/email/atom.xml</id>
    <entry xml:lang="en">
        <title>gmail-to-fastmail: keep your Gmail labels in sync on Fastmail</title>
        <published>2026-08-03T00:00:00+00:00</published>
        <updated>2026-08-03T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/gmail-to-fastmail-sync-yourlabels/"/>
        <id>https://colas.nahaboo.net/code/gmail-to-fastmail-sync-yourlabels/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/gmail-to-fastmail-sync-yourlabels/">&lt;p&gt;&lt;img src=&#39;gmail-to-fastmail.svg&#39; align=right width=300&gt;I moved to Fastmail some time ago, but like many of us I kept one foot in Gmail: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.fastmail.help/hc/en-us/articles/1500000278022-Using-other-email-addresses-with-fetch&quot;&gt;Fastmail&#39;s &quot;fetch&quot;&lt;/a&gt; tool keeps duplicating my incoming Gmail into my Fastmail account — a backup, an escape plan, and a bridge for family members who are not quite ready to leave Gmail yet.&lt;/p&gt;
&lt;p&gt;But there was a hole: the &lt;strong&gt;labels&lt;/strong&gt; I add on Gmail after the initial migration (manually, or with my rules) were never reproduced on Fastmail. So I wrote &lt;strong&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/gmail-to-fastmail&quot;&gt;gmail-to-fastmail&lt;/a&gt;&lt;/strong&gt;, a single Go binary that incrementally syncs your Gmail labels to Fastmail.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-it-works&quot; aria-label=&quot;Anchor link for: how-it-works&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It reads your Gmail via IMAP (read-only, &lt;code&gt;X-GM-LABELS&lt;/code&gt;), and applies the labels on Fastmail via JMAP (a more efficient variant of IMAP), in batches of 10 000. Progress is kept in a local SQLite database, so each run resumes where the last one stopped — once caught up, a run takes about 15 seconds. Perfect for cron.&lt;/p&gt;
&lt;h2 id=&quot;what-it-does&quot;&gt;What it does&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-it-does&quot; aria-label=&quot;Anchor link for: what-it-does&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Labels mapped&lt;/strong&gt;: your Gmail labels become Fastmail labels, created on demand, never deleted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Categories&lt;/strong&gt;: Gmail&#39;s system categories (Inbox, Updates, Social...) become underscore-prefixed labels &lt;code&gt;_Inbox&lt;/code&gt;, &lt;code&gt;_Updates&lt;/code&gt;, &lt;code&gt;_Social&lt;/code&gt;...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trash&lt;/strong&gt;: emails deleted on Gmail are not deleted on Fastmail, just labelled &lt;code&gt;_Trash&lt;/code&gt; — a backup of your deleted mail, with an easy way to &quot;empty the bin&quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local cache&lt;/strong&gt;: unchanged emails are skipped, so Fastmail&#39;s API is left in peace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mirror mode&lt;/strong&gt;: &lt;code&gt;-m&lt;/code&gt;/&lt;code&gt;-M&lt;/code&gt; optionally imports emails missing on Fastmail, not just labels. There are more options, detailed on the GitGub repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;installation-usage-and-more-info&quot;&gt;Installation, Usage, and more info&lt;a class=&quot;zola-anchor&quot; href=&quot;#installation-usage-and-more-info&quot; aria-label=&quot;Anchor link for: installation-usage-and-more-info&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;See the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/gmail-to-fastmail&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;why-go&quot;&gt;Why Go?&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-go&quot; aria-label=&quot;Anchor link for: why-go&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Because it is a single self-contained binary with no runtime dependencies — you know my &lt;a href=&quot;/blog/go-single-binary-fanatic&quot;&gt;thing about that&lt;/a&gt;. No Python env, no node_modules, no nothing. Free (MIT).&lt;/p&gt;
&lt;p&gt;Also, AI co-written: don&#39;t like, don&#39;t use.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>mailpixtracker: a lightweight bash CGI to track emails</title>
        <published>2026-08-01T00:00:00+00:00</published>
        <updated>2026-08-01T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/mailpixtracker-a-bash-cgi-to-track-emails/"/>
        <id>https://colas.nahaboo.net/code/mailpixtracker-a-bash-cgi-to-track-emails/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/mailpixtracker-a-bash-cgi-to-track-emails/">&lt;p&gt;&lt;img src=&quot;mpt3-576.png&quot; width=300 align=right&gt;When I send an email, did the recipient read it? So I wrote &lt;strong&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/mailpixtracker&quot;&gt;mailpixtracker&lt;/a&gt;&lt;/strong&gt;, a small self-hosted CGI script that tracks when your emails are opened, via the classic invisible 1x1 pixel trick.&lt;/p&gt;
&lt;p&gt;Think of &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.getmailtracker.com/&quot;&gt;MailTracker&lt;/a&gt; or &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://mailtrack.email/&quot;&gt;MailTrack&lt;/a&gt;, but without all the marketing machinery: no account on a third-party server, no spyware concerns, no &quot;business intelligence&quot; dashboards. Just three bash scripts on your own web server.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-it-works&quot; aria-label=&quot;Anchor link for: how-it-works&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You create a new tracker with an optional name on your mailpixtracker page. It gives you a tiny HTML snippet to paste in your email such as:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot; &gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #179299;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;img&lt;/span&gt;&lt;span style=&quot;color: #DF8E1D;&quot;&gt; src&lt;/span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;#39;https://my.mailpixtracker.org/_/12-I5rHJCFap&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: #DF8E1D;&quot;&gt; width&lt;/span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #DF8E1D;&quot;&gt; height&lt;/span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When someone opens your email and their mailer loads images, your server logs the request: date, IP, hostname, user-agent. No data ever leaves your server.&lt;/p&gt;
&lt;h2 id=&quot;features&quot;&gt;Features&lt;a class=&quot;zola-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Anchor link for: features&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No accounts&lt;/strong&gt;: The URL &lt;em&gt;is&lt;/em&gt; the authentication, via &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.w3.org/TR/capability-urls/&quot;&gt;Capability URLs&lt;/a&gt;. The admin URL is your unguessable &quot;password&quot; — share it with nobody and you are safe.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plain files&lt;/strong&gt;: Logs are tab-separated text, one line per open. No database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Colored logs&lt;/strong&gt;: Each distinct IP gets its own &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://programmingdesignsystems.com/color/perceptually-uniform-color-spaces/&quot;&gt;perceptually-spaced color&lt;/a&gt;, so you can spot repeat readers at a glance. Your own opens (while composing the email) show in dim grey, so they do not pollute the picture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New entries highlighted&lt;/strong&gt;: Entries added since your last visit get a yellow marker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notes field&lt;/strong&gt;: Each tracker has an editable name and notes — handy to remember what you sent, to whom, and when.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guest accounts&lt;/strong&gt;: Create isolated spaces for different purposes (work, family, surfing...) with admin (you) accounts, or guest accounts that you can just give to others with a link. Non-admin guests only see their own trackers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geolocalization&lt;/strong&gt; (optional): With the MaxMind databases installed, logs show the organization and country of each reader.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;caveats&quot;&gt;Caveats&lt;a class=&quot;zola-anchor&quot; href=&quot;#caveats&quot; aria-label=&quot;Anchor link for: caveats&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Email tracking is not foolproof. Most mailers now prompt before loading images, so people can read your email without ever triggering the tracker. Mailpixtracker will not tell you everything — but when it does fire, it is accurate, and the logs are all yours.&lt;/p&gt;
&lt;p&gt;Also note that it is a tool for personal curiosity, not for marketing analytics: it has no click tracking, no A/B testing, no &quot;campaigns&quot;. If you want that, there are plenty of SaaS products; this one is the lazy, self-hosted, private alternative.&lt;/p&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;a class=&quot;zola-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Anchor link for: install&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For instructions, see the code is at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ColasNahaboo/mailpixtracker&quot;&gt;github.com/ColasNahaboo/mailpixtracker&lt;/a&gt;, it is multi-licensed (MIT, Apache 2.0, MPL 2.0, LGPL v3, GPL v3) — pick whichever suits your project.&lt;/p&gt;
</content>
        
    </entry>
</feed>
