Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Learning about IMAP - This does not support gmail because per the included checker app:

Password: 2025/10/16 15:43:03 Connecting to imap.gmail.com:993... 2025/10/16 15:43:03 Connected successfully 2025/10/16 15:43:03 Logging in as user@gmail.com... 2025/10/16 15:43:03 Logged in successfully 2025/10/16 15:43:03 Server capabilities: 2025/10/16 15:43:03 - ENABLE 2025/10/16 15:43:03 - APPENDLIMIT=35651584 2025/10/16 15:43:03 - IDLE 2025/10/16 15:43:03 - NAMESPACE 2025/10/16 15:43:03 - ID 2025/10/16 15:43:03 - XLIST 2025/10/16 15:43:03 - UIDPLUS 2025/10/16 15:43:03 - ESEARCH 2025/10/16 15:43:03 - UTF8=ACCEPT 2025/10/16 15:43:03 - CHILDREN 2025/10/16 15:43:03 - CONDSTORE 2025/10/16 15:43:03 - LIST-EXTENDED 2025/10/16 15:43:03 - LITERAL- 2025/10/16 15:43:03 - UNSELECT 2025/10/16 15:43:03 - QUOTA 2025/10/16 15:43:03 - MOVE 2025/10/16 15:43:03 - LIST-STATUS 2025/10/16 15:43:03 - SPECIAL-USE 2025/10/16 15:43:03 - IMAP4rev1 2025/10/16 15:43:03 - X-GM-EXT-1 2025/10/16 15:43:03 - COMPRESS=DEFLATE

Checking for required capabilities: UIDPLUS: SUPPORTED NOTIFY: NOT SUPPORTED CONDSTORE: SUPPORTED QRESYNC: NOT SUPPORTED

Some required capabilities are missing



IIRC gmail doesn't support any capabilities from after ~2003.

In order to synchronise with this kind of server, you need to list UIDs and Flags from all mailboxes and perform a full comparison of which items changed. There's no NOTIFY, so you need to do this periodically.

This requires substantially more network and processing, and an entirely different application design. Such a design cannot immediately synchronise new entries either.

ImapGoose doesn't cover this kind of scenario, there are plenty of existing tools that can synchronise legacy servers already.


Here's a nix flake for v0.2.0

{ description = "IMAP to Maildir synchronization tool";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = {
    self,
    nixpkgs,
    flake-utils,
  }:
    flake-utils.lib.eachDefaultSystem (
      system: let
        pkgs = nixpkgs.legacyPackages.${system};
      in {
        packages = {
          default = pkgs.buildGoModule {
            pname = "imapgoose";
            version = "0.2.0";

            src = pkgs.fetchFromSourcehut {
              owner = "~whynothugo";
              repo = "ImapGoose";
              rev = "v0.2.0";
              hash = "sha256-+LHj4scdMDBOJ0f04IEeVVZSLEJQSQSndbtHEjN6kLs=";
            };

            vendorHash = "sha256-nD2KgBWmzkTQZHwH/IaGVbhIC2zR4VYdoUTocL0cP+A=";

            subPackages = ["cmd/imapgoose" "cmd/capcheck"];

            ldflags = ["-s" "-w"];

            postInstall = ''
              install -Dm644 imapgoose.1 -t $out/share/man/man1/
              install -Dm644 imapgoose.conf.5 -t $out/share/man/man5/
              install -Dm644 LICENCE -t $out/share/licenses/imapgoose/
            '';

            meta = with pkgs.lib; {
              description = "IMAP to Maildir synchronization tool";
              homepage = "https://git.sr.ht/~whynothugo/ImapGoose";
              license = licenses.isc;
              mainProgram = "imapgoose";
            };
          };
        };

        devShells.default = pkgs.mkShell {
          buildInputs = with pkgs; [
            go
            gopls
            gotools
            golangci-lint
          ];
        };
      }
    );
}




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: