ShellackGobln7
4 months ago
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
WhyNotHugo
4 months ago
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.
ShellackGobln7
4 months ago
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
];
};
}
);
}