{"id":44672055,"url":"https://github.com/marcfargas/go-mapi","last_synced_at":"2026-04-29T23:13:09.915Z","repository":{"id":338066477,"uuid":"1141455240","full_name":"marcfargas/go-mapi","owner":"marcfargas","description":"Right-click any file in Windows Explorer, click \"Send to → Mail recipient\", and the email appears ready to send in Gmail - no configuration needed, no subscription fees, completely open source.","archived":false,"fork":false,"pushed_at":"2026-04-29T09:14:27.000Z","size":5037,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-29T09:15:16.518Z","etag":null,"topics":["affixa-alternative","business-tools","chrome-extension","email","email-client","email-integration","enterprise","gmail","google-workspace","mapi","native-messaging","open-source","productivity","windows","windows-integration"],"latest_commit_sha":null,"homepage":"https://go-mapi.app","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcfargas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"marcfargas"}},"created_at":"2026-01-24T21:49:17.000Z","updated_at":"2026-04-12T08:29:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/marcfargas/go-mapi","commit_stats":null,"previous_names":["marcfargas/go-mapi"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/marcfargas/go-mapi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcfargas%2Fgo-mapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcfargas%2Fgo-mapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcfargas%2Fgo-mapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcfargas%2Fgo-mapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcfargas","download_url":"https://codeload.github.com/marcfargas/go-mapi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcfargas%2Fgo-mapi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32447410,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["affixa-alternative","business-tools","chrome-extension","email","email-client","email-integration","enterprise","gmail","google-workspace","mapi","native-messaging","open-source","productivity","windows","windows-integration"],"created_at":"2026-02-15T02:12:29.475Z","updated_at":"2026-04-29T23:13:09.872Z","avatar_url":"https://github.com/marcfargas.png","language":"C++","funding_links":["https://github.com/sponsors/marcfargas"],"categories":[],"sub_categories":[],"readme":"# go-mapi\n\n[![Chrome Web Store](https://img.shields.io/chrome-web-store/v/ndhoimoncoekjmldllpbjdanamdhemcl?label=Chrome%20Web%20Store)](https://chromewebstore.google.com/detail/go-mapi/ndhoimoncoekjmldllpbjdanamdhemcl)\n[![Edge Add-ons](https://img.shields.io/badge/Edge%20Add--ons-go--mapi-blue)](https://microsoftedge.microsoft.com/addons/detail/gomapi/jfpjjkihpciojgaohonjooengomfbpom)\n[![GitHub Release](https://img.shields.io/github/v/release/marcfargas/go-mapi)](https://github.com/marcfargas/go-mapi/releases/latest)\n[![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-blue.svg)](LICENSE)\n\n**The MAPI-to-Gmail bridge you always wanted.**\n\n## Overview\n\n[MAPI](https://en.wikipedia.org/wiki/MAPI) (Messaging Application Programming Interface) is a Microsoft Windows API that allows programs to become email-aware. It enables the \"Send by Email\" feature found in many Windows applications - from right-clicking a file in Explorer to printing to PDF and emailing it.\n\n**Gmail and Google Workspace have no native MAPI support.** Despite Google Workspace being a major enterprise email solution, there has never been an official MAPI-to-Gmail bridge.\n\nA few third-party tools have filled this gap over the years. The most notable, [Affixa](https://help.affixa.com/article/100-sunsetting-and-retirement-of-affixa), recently announced its shutdown - leaving Google Workspace users without a way to use \"Send by Email\" functionality.\n\n**go-mapi** is the open-source replacement.\n\n## Status\n\n**v2.0.0** — First shipped milestone with a single-click Windows installer and a full Chromium-family browser extension. See [Installation](#installation) for the end-user flow.\n\n| Component | Status |\n|-----------|--------|\n| MAPI interception (ANSI + Unicode) | ✅ Stable |\n| Native messaging bridge | ✅ Stable |\n| Browser extension (popup + notifications) | ✅ Stable |\n| Gmail draft creation (with attachments) | ✅ Stable |\n| UTF-8 / codepage encoding | ✅ Stable |\n| Single-click Windows installer (Inno Setup 6) | ✅ v2.0.0 |\n| Chrome / Edge / Chromium / Brave / Vivaldi | ✅ v2.0.0 |\n| Windows Sandbox local repro | ✅ v2.0.0 (`tests/sandbox/`) |\n\n## Architecture\n\ngo-mapi uses a three-component architecture optimized for enterprise deployment:\n\n```\n┌─────────────────────┐                      ┌─────────────────────┐\n│   Windows App       │                      │  Browser Extension  │\n│   (Explorer, etc.)  │                      │  (Chrome / Edge)    │\n│         │           │                      │         │           │\n│    MAPISendMail()   │                      │   React Popup UI    │\n│         ▼           │                      │         │           │\n│  ┌─────────────┐    │   %TEMP%\\go-mapi\\    │   ┌───────────┐     │\n│  │ go-mapi.dll │────┼──────────────────────┤   │ Gmail API │     │\n│  └─────────────┘    │         ▲            │   └───────────┘     │\n└─────────────────────┘         │            └─────────────────────┘\n                                │\n                     ┌──────────┴──────────┐\n                     │  Native Messaging   │\n                     │  Host (Go binary)   │\n                     │  Watches folder     │\n                     └─────────────────────┘\n```\n\n### Components\n\n| Component | Technology | Purpose |\n|-----------|------------|---------|\n| Interceptor DLL | C++ (MinGW) | Captures MAPI calls, writes JSON to `%TEMP%\\go-mapi\\` |\n| Native Host | Go | Watches folder, bridges to browser via Native Messaging |\n| Browser Extension | React + TypeScript | UI + Gmail API (Chrome \u0026 Edge) |\n\n### Why This Architecture?\n\n- **Enterprise-friendly**: DLL and host installed once with admin rights; extension updates independently\n- **Simple OAuth**: Extension uses Chrome Identity API — no separate auth flow needed\n- **Cross-browser**: Same extension works in Chrome and Edge\n- **Debuggable**: JSON files on disk make the IPC trivially inspectable\n\n## Installation\n\n**For end users.** No terminal, no toolchain, no admin PowerShell required.\n\n### Prerequisites\n\n- Windows 10 or 11\n- Chrome, Edge, Chromium, Brave, or Vivaldi\n- A Gmail or Google Workspace account\n\n### Install the Windows host\n\n1. Download `go-mapi-setup.exe` from the latest GitHub Release:\n\n   **[Direct download: go-mapi-setup.exe](https://github.com/marcfargas/go-mapi/releases/latest/download/go-mapi-setup.exe)**\n\n   This link always points at the latest stable release.\n\n2. Run the installer. You will see **one UAC prompt** — click **Yes**. The\n   installer copies the binaries to `C:\\Program Files\\go-mapi\\`, registers\n   go-mapi as the default Windows Mail client, and writes native-messaging\n   registry entries for Chrome, Edge, Chromium, Brave, and Vivaldi in one\n   shot.\n\n3. Install the browser extension. For v2.0.0 the Chrome Web Store listing\n   is pending review — in the meantime, load the unpacked extension from\n   the release ZIP asset attached to the same GitHub Release.\n\n### If Windows SmartScreen blocks the installer\n\nYou may see a blue **\"Windows protected your PC\"** dialog when you first\nrun `go-mapi-setup.exe`. This happens because the v2.0.0 installer ships\nunsigned — the project's code-signing certificate (via the SignPath\nFoundation OSS program) is in review at the time of this release. The\ninstaller is safe: the source is public on GitHub, and every release is\nbuilt from a reproducible GitHub Actions workflow (see\n`.github/workflows/installer-release.yml`).\n\nTo continue the install:\n\n1. Click the small **More info** link in the SmartScreen dialog.\n2. A **Run anyway** button appears below the publisher line. Click it.\n3. Proceed with the normal UAC prompt and installer wizard.\n\nThis is a one-time click-through per downloaded file — subsequent runs of\nthe same `go-mapi-setup.exe` don't show the dialog again. A signed\ninstaller will ship as v2.0.1 once SignPath approval lands, at which\npoint this section becomes unnecessary.\n\n## Usage\n\n1. Right-click any file in Windows Explorer → **Send to** → **Mail recipient**\n   (or trigger any other Windows \"Send by Email\" action).\n2. The email appears in the go-mapi browser extension popup as a Gmail\n   draft preview.\n3. Click **Save as Draft** to push it to your Gmail drafts folder (or\n   **Delete** to discard it).\n\nThat's it. No per-user setup, no extra prompts, and the extension\nauto-detects the host once it's installed — if you install the extension\nfirst and then the host, the extension's \"Install go-mapi\" banner\ndisappears within six seconds and a one-time success toast confirms the\nhandshake.\n\n## Uninstall\n\nWindows **Settings → Apps → Installed apps → go-mapi → Uninstall**, or\nrun the uninstaller directly at `C:\\Program Files\\go-mapi\\unins000.exe`.\n\nUninstall removes every file and registry entry the installer wrote\n(DLL, native host binary, all five browser registry trees, the MAPI\nhandler registration, `%TEMP%\\go-mapi\\` leftovers) and restores the\nprevious default Mail client from the backup file saved during install\n(`C:\\ProgramData\\go-mapi\\uninst\\previous-mail-client.json`).\n\n## Privacy\n\ngo-mapi is privacy-first by design:\n\n- No telemetry of any kind. No update-check beacons, no crash reporting.\n- No long-term storage of message content. Transient JSON files under\n  `%TEMP%\\go-mapi\\` are deleted immediately after you click **Save as\n  Draft** or **Delete**.\n- No network calls except to the Gmail API, on your behalf, to create\n  the draft.\n- No background service, no tray icon, no auto-start.\n\n## Enterprise Deployment\n\nFor managed Windows environments:\n\n- **Silent install**: `go-mapi-setup.exe /VERYSILENT /SUPPRESSMSGBOXES` — the Inno Setup installer supports the standard `/VERYSILENT`, `/SILENT`, and `/LOG=\u003cpath\u003e` switches. See the [Inno Setup Setup command line](https://jrsoftware.org/ishelp/index.php?topic=setupcmdline) documentation for the full list.\n- **Extension deployment**: force-install via Chrome/Edge enterprise policy ([`ExtensionInstallForcelist`](https://chromeenterprise.google/policies/#ExtensionInstallForcelist)).\n- **Registry**: all state is under `HKLM\\SOFTWARE\\Clients\\Mail\\go-mapi` and the five `HKLM\\SOFTWARE\\*\\NativeMessagingHosts\\com.gomapi.host` trees. Export these keys from a reference machine for GPO-based deployment if needed.\n- **OAuth**: the extension uses the Chrome Identity API against a GCP OAuth client baked into `src/extension/public/manifest.json`. For enterprise deployments, fork the extension and replace the OAuth client ID with your own GCP project's credentials.\n\n## Development\n\n**For contributors building from source.** If you're just installing\ngo-mapi to use it, you want the [Installation](#installation) section\nabove instead.\n\n### Prerequisites\n\n- Windows 10/11 + Admin PowerShell\n- Node 18+ and npm 9+\n- Go 1.21+\n- MinGW with gcc/g++ toolchain (for the C++ interceptor DLL)\n- CMake 3.16+\n- Chrome or Edge for extension testing\n\n### Build everything\n\n```powershell\nnpm ci                         # install extension dev dependencies\nnpm run build:interceptor      # MinGW + CMake → src/interceptor/build/bin/go-mapi.dll\nnpm run build:native-host      # Go → src/native-host/build/go-mapi-host.exe\nnpm run build:extension        # Vite → src/extension/dist/\n```\n\n### Install from local build (dev loop)\n\n```powershell\n# From an admin PowerShell on the build host:\n.\\scripts\\install.ps1 -Local\n```\n\nThe legacy `scripts/install.ps1` path is still supported for contributors\nwho want to test an unreleased build without compiling the Inno Setup\ninstaller every iteration. It uses the same `.tmpl` native-messaging\nmanifests as the production installer (FOUND-06), so the resulting\nregistry state is identical.\n\n### Build the Inno Setup installer locally\n\n```powershell\n\u0026 \"C:\\Program Files (x86)\\Inno Setup 6\\iscc.exe\" `\n    /DGOMAPIVersion=2.0.0-local `\n    src\\installer\\go-mapi.iss\n# → src\\installer\\dist\\go-mapi-setup.exe\n```\n\n### Run the test suites\n\n```powershell\ncd src\\native-host \u0026\u0026 go test ./... ; cd ..\\..\ncd src\\interceptor \u0026\u0026 cmake .. -G \"MinGW Makefiles\" -DBUILD_TESTS=ON \u0026\u0026 cmake --build . \u0026\u0026 ctest --output-on-failure ; cd ..\\..\ncd src\\extension \u0026\u0026 npm run test:run ; cd ..\\..\nnpx playwright test --config tests\\e2e\\playwright.config.ts\n```\n\n### Local Windows Sandbox repro (REL-02)\n\nSee [`tests/sandbox/README.md`](tests/sandbox/README.md) for the local\ninstall → verify → uninstall repro path. Requires Windows 11 24H2+ and\nthe `wsb` CLI.\n\n### CI workflows\n\n- `.github/workflows/build.yml` — per-PR Go + C++ + TypeScript build and test\n- `.github/workflows/installer-smoke.yml` — per-PR Pester 5 installer smoke test on `windows-latest`\n- `.github/workflows/e2e.yml` — Playwright happy-path + install UX on `windows-latest`\n- `.github/workflows/go-race-nightly.yml` — nightly `go test -race` on `windows-latest` amd64\n- `.github/workflows/installer-release.yml` — tag-triggered SignPath-gated installer release\n\n### Troubleshooting a local install\n\n- **DLL not found** — verify `C:\\Program Files\\go-mapi\\go-mapi.dll` exists and `HKLM\\SOFTWARE\\Clients\\Mail\\go-mapi\\DLLPath` points at it.\n- **Extension shows \"Install the go-mapi host\" after installing** — wait up to 6 seconds for the reconnect alarm. If the prompt doesn't clear, check the service worker console in `chrome://extensions` and the host log at `%TEMP%\\go-mapi\\native-host.log`.\n- **\"Send to → Mail recipient\" doesn't appear** — restart Windows Explorer (`taskkill /im explorer.exe /f \u0026\u0026 start explorer.exe`) so the shell picks up the new MAPI handler registration.\n\n## Why \"go-mapi\"?\n\nThe name is a nod to \"Go(ogle)\" and \"let's go\". The project started as a pragmatic solution to the [Affixa shutdown](https://help.affixa.com/article/100-sunsetting-and-retirement-of-affixa).\n\n## Contributing\n\nWe welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on:\n- Setting up the development environment\n- Building components\n- Submitting pull requests\n\n## License\n\ngo-mapi is Free Software licensed under the **GNU Lesser General Public License, version 3.0 or any later version** (`LGPL-3.0-or-later`).\n\n- `LICENSE` — the full LGPL-3.0 text (additional permissions)\n- `COPYING` — the full GPL-3.0 text (LGPL-3.0 is built on top of GPL-3.0)\n\nSee https://www.gnu.org/licenses/lgpl-3.0.html for the canonical license text and https://www.gnu.org/licenses/gpl-3.0.html for the underlying GPL-3.0.\n\n## References\n\n- [Simple MAPI Documentation](https://learn.microsoft.com/en-us/previous-versions/dd296734(v=vs.85))\n- [Chrome Native Messaging](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)\n- [Gmail API](https://developers.google.com/gmail/api)\n- [Affixa Sunset Announcement](https://help.affixa.com/article/100-sunsetting-and-retirement-of-affixa)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcfargas%2Fgo-mapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcfargas%2Fgo-mapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcfargas%2Fgo-mapi/lists"}