{"id":22803059,"url":"https://github.com/tatsh/mutt-oauth2","last_synced_at":"2026-04-27T03:02:07.756Z","repository":{"id":265789851,"uuid":"896651620","full_name":"Tatsh/mutt-oauth2","owner":"Tatsh","description":"Packaged, maintained version of contributed mutt_oauth2.py script.","archived":false,"fork":false,"pushed_at":"2026-04-26T04:01:01.000Z","size":6903,"stargazers_count":7,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-26T05:32:01.579Z","etag":null,"topics":["email","gmail","mutt","outlook"],"latest_commit_sha":null,"homepage":"https://tatsh.github.io/mutt-oauth2/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tatsh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"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":"Tatsh","ko_fi":"tatsh2","liberapay":"tatsh2","patreon":"tatsh2"}},"created_at":"2024-11-30T23:44:25.000Z","updated_at":"2026-04-26T03:54:43.000Z","dependencies_parsed_at":"2026-01-02T06:04:57.378Z","dependency_job_id":null,"html_url":"https://github.com/Tatsh/mutt-oauth2","commit_stats":null,"previous_names":["tatsh/mutt-oauth2"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Tatsh/mutt-oauth2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fmutt-oauth2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fmutt-oauth2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fmutt-oauth2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fmutt-oauth2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tatsh","download_url":"https://codeload.github.com/Tatsh/mutt-oauth2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tatsh%2Fmutt-oauth2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32320683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["email","gmail","mutt","outlook"],"created_at":"2024-12-12T09:08:25.393Z","updated_at":"2026-04-27T03:02:07.750Z","avatar_url":"https://github.com/Tatsh.png","language":"Python","funding_links":["https://github.com/sponsors/Tatsh","https://ko-fi.com/tatsh2","https://liberapay.com/tatsh2","https://patreon.com/tatsh2","https://buymeacoffee.com/Tatsh","https://www.patreon.com/Tatsh2"],"categories":[],"sub_categories":[],"readme":"# mutt-oauth2\n\n\u003c!-- WISWA-GENERATED-README:START --\u003e\n\n[![Python versions](https://img.shields.io/pypi/pyversions/mutt-oauth2.svg?color=blue\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![PyPI - Version](https://img.shields.io/pypi/v/mutt-oauth2)](https://pypi.org/project/mutt-oauth2/)\n[![GitHub tag (with filter)](https://img.shields.io/github/v/tag/Tatsh/mutt-oauth2)](https://github.com/Tatsh/mutt-oauth2/tags)\n[![License](https://img.shields.io/github/license/Tatsh/mutt-oauth2)](https://github.com/Tatsh/mutt-oauth2/blob/master/LICENSE.txt)\n[![GitHub commits since latest release (by SemVer including pre-releases)](https://img.shields.io/github/commits-since/Tatsh/mutt-oauth2/v0.2.0/master)](https://github.com/Tatsh/mutt-oauth2/compare/v0.2.0...master)\n[![CodeQL](https://github.com/Tatsh/mutt-oauth2/actions/workflows/codeql.yml/badge.svg)](https://github.com/Tatsh/mutt-oauth2/actions/workflows/codeql.yml)\n[![QA](https://github.com/Tatsh/mutt-oauth2/actions/workflows/qa.yml/badge.svg)](https://github.com/Tatsh/mutt-oauth2/actions/workflows/qa.yml)\n[![Tests](https://github.com/Tatsh/mutt-oauth2/actions/workflows/tests.yml/badge.svg)](https://github.com/Tatsh/mutt-oauth2/actions/workflows/tests.yml)\n[![Coverage Status](https://coveralls.io/repos/github/Tatsh/mutt-oauth2/badge.svg?branch=master)](https://coveralls.io/github/Tatsh/mutt-oauth2?branch=master)\n[![Dependabot](https://img.shields.io/badge/Dependabot-enabled-blue?logo=dependabot)](https://github.com/dependabot)\n[![Documentation Status](https://readthedocs.org/projects/mutt-oauth2/badge/?version=latest)](https://mutt-oauth2.readthedocs.org/?badge=latest)\n[![mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n[![uv](https://img.shields.io/badge/uv-261230?logo=astral)](https://docs.astral.sh/uv/)\n[![pytest](https://img.shields.io/badge/pytest-zz?logo=Pytest\u0026labelColor=black\u0026color=black)](https://docs.pytest.org/en/stable/)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Downloads](https://static.pepy.tech/badge/mutt-oauth2/month)](https://pepy.tech/project/mutt-oauth2)\n[![Stargazers](https://img.shields.io/github/stars/Tatsh/mutt-oauth2?logo=github\u0026style=flat)](https://github.com/Tatsh/mutt-oauth2/stargazers)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://github.com/pre-commit/pre-commit)\n[![Prettier](https://img.shields.io/badge/Prettier-black?logo=prettier)](https://prettier.io/)\n\n[![@Tatsh](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%2F%3Factor=did%3Aplc%3Auq42idtvuccnmtl57nsucz72\u0026query=%24.followersCount\u0026label=Follow+%40Tatsh\u0026logo=bluesky\u0026style=social)](https://bsky.app/profile/Tatsh.bsky.social)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Tatsh-black?logo=buymeacoffee)](https://buymeacoffee.com/Tatsh)\n[![Libera.Chat](https://img.shields.io/badge/Libera.Chat-Tatsh-black?logo=liberadotchat)](irc://irc.libera.chat/Tatsh)\n[![Mastodon Follow](https://img.shields.io/mastodon/follow/109370961877277568?domain=hostux.social\u0026style=social)](https://hostux.social/@Tatsh)\n[![Patreon](https://img.shields.io/badge/Patreon-Tatsh2-F96854?logo=patreon)](https://www.patreon.com/Tatsh2)\n\n\u003c!-- WISWA-GENERATED-README:STOP --\u003e\n\nThis is an update of [Alexander Perlis' script](https://github.com/muttmua/mutt/blob/master/contrib/mutt_oauth2.py)\nand conversion to a package. Instead of using GPG for token storage, this package uses Keyring.\n\n## Installation\n\n### Pip\n\n```shell\npip install mutt-oauth2\n```\n\n## Usage\n\n```plain\nUsage: mutt-oauth2 [OPTIONS]\n\n  Obtain and print a valid OAuth2 access token.\n\nOptions:\n  -a, --authorize      Manually authorise new tokens.\n  -d, --debug          Enable debug logging.\n  -t, --test           Test authentication.\n  -u, --username TEXT  Keyring username.\n  -h, --help           Show this message and exit.\n```\n\nStart by calling `mutt-oauth2 -a`. Be sure to have your client ID and and client secret available.\n\n### Scopes required\n\n| Provider  | Scopes                                                              |\n| --------- | ------------------------------------------------------------------- |\n| Gmail     | Gmail API                                                           |\n| Microsoft | offline_access IMAP.AccessAsUser.All POP.AccessAsUser.All SMTP.Send |\n\nTo support other accounts, use the `--username` argument with a unique string such as the account\nemail address.\n\nTest the script with the `--test` argument.\n\n### mutt configuration\n\nAdd the following to `muttrc`:\n\n```plain\nset imap_authenticators=\"oauthbearer:xoauth2\"\nset imap_oauth_refresh_command=\"/path/to/mutt-oauth2\"\nset smtp_authenticators=${imap_authenticators}\nset smtp_oauth_refresh_command=${imap_oauth_refresh_command}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatsh%2Fmutt-oauth2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftatsh%2Fmutt-oauth2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatsh%2Fmutt-oauth2/lists"}