Skip to content

ayrtonnotrya/gmail-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Gmail CLI

Python Typer Style License

Uma ferramenta de linha de comando (CLI) robusta para interagir com o Gmail e Google Drive.

O diferencial deste projeto รฉ sua arquitetura "Dual-Mode":

  1. Modo Humano: Saรญda formatada com tabelas, cores e spinners (via Rich).
  2. Modo Agente (IA): Saรญda em JSON limpo (--json) para ser consumido facilmente por LLMs e scripts.

๐Ÿš€ Instalaรงรฃo

Como a ferramenta usa poetry e gerenciamento moderno, a instalaรงรฃo recomendada รฉ via pipx para garantir isolamento e disponibilidade global no shell.

Prรฉ-requisitos

  • Python 3.10+
  • pipx (sudo apt install pipx)

Instalando

pipx install git+https://github.com/ayrtonnotrya/gmail-cli.git

Apรณs instalar, o comando gmail estarรก disponรญvel no seu terminal.

๐Ÿ›  Configuraรงรฃo (Primeiro Uso)

Antes de usar, vocรช precisa autenticar com o Google.

  1. Obtenha suas credenciais OAuth 2.0 no Google Cloud Console.

    ๐Ÿ’ก Dica: Para um passo-a-passo detalhado de como criar o projeto e habilitar as APIs, leia o Guia de Configuraรงรฃo (SETUP_GUIDE.md).

  2. Baixe o arquivo credentials.json.
  3. Execute o comando de login:
gmail auth login --credentials /caminho/para/credentials.json

Isso salvarรก o token de sessรฃo de forma segura seguindo o padrรฃo XDG (~/.config/gmail-cli/).

๐Ÿ“– Uso

Comandos Disponรญveis

gmail --help                        # Exibe ajuda geral
gmail auth login                    # Autenticar com Google
gmail search <query>                # Buscar emails
gmail read <message_id>             # Ler email especรญfico
gmail thread <message_id>           # Ver thread completa de um email
gmail download <msg_id> <att_id>    # Fazer download de anexo

Buscar E-mails

Modo Humano (Tabela Formatada)

gmail search "fatura cartรฃo" --limit 5

Saรญda:

Searching for: fatura cartรฃo
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ ID             โ”ƒ Date               โ”ƒ From             โ”ƒ Subject              โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ 18abc123def456 โ”‚ 2025-11-15 10:30:0 โ”‚ banco@example.comโ”‚ Fatura do Cartรฃo     โ”‚
โ”‚ 18abc789ghi012 โ”‚ 2025-11-10 14:20:1 โ”‚ loja@shop.com    โ”‚ Confirmaรงรฃo Cartรฃo   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Modo Agente (JSON Estruturado)

gmail search "projeto apollo" --since 7d --json

Saรญda:

[
  {
    "id": "18abc123def456",
    "date": "2025-11-15T10:30:00Z",
    "from": "team@company.com",
    "subject": "Update: Projeto Apollo"
  },
  {
    "id": "18abc789ghi012",
    "date": "2025-11-14T15:45:00Z",
    "from": "manager@company.com",
    "subject": "Re: Apollo - Next Steps"
  }
]

Queries Avanรงadas

# Emails nรฃo lidos
gmail search "is:unread" --limit 10

# Emails com anexos
gmail search "has:attachment" --json

# Emails de um remetente especรญfico
gmail search "from:boss@company.com" --limit 5

# Combinaรงรฃo de critรฉrios
gmail search "from:finance subject:invoice newer_than:30d" --json

# Emails importantes recentes
gmail search "is:important newer_than:7d" --limit 10

Deduplicaรงรฃo por Thread

Por padrรฃo, o search retorna todos os emails que atendem ร  consulta. Se mรบltiplos emails da mesma thread correspondem, todos aparecem nos resultados. Use --first-per-thread para mostrar apenas o primeiro email de cada thread:

# Buscar emails, mostrando apenas o primeiro de cada thread
gmail search "projeto apollo" --first-per-thread

# รštil para depois usar o comando thread
gmail search "has:attachment" --first-per-thread --limit 20
# Agora vocรช tem uma lista limpa de threads, escolha uma:
gmail thread <MESSAGE_ID>

# Combinaรงรฃo com outras flags
gmail search "from:cliente@empresa.com" --first-per-thread --since 30d --json

Benefรญcios:

  • Resultados mais limpos (uma entrada por conversa)
  • Facilita uso do comando thread posteriormente
  • Cada thread aparece apenas uma vez, mesmo que mรบltiplos emails correspondam ร  query

Ler E-mail

Modo Humano (Formatado)

gmail read 18abc123def456

Saรญda:

Reading message: 18abc123def456
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Email Details โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Subject: Update: Projeto Apollo                     โ”‚
โ”‚ From: team@company.com                              โ”‚
โ”‚ Date: 2025-11-15T10:30:00Z                          โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Body:
Olรก equipe,

Segue atualizaรงรฃo do projeto Apollo...

Modo Agente (JSON)

gmail read 18abc123def456 --json

Saรญda:

{
  "id": "18abc123def456",
  "subject": "Update: Projeto Apollo",
  "from": "team@company.com",
  "date": "2025-11-15T10:30:00Z",
  "body": "Olรก equipe,\n\nSegue atualizaรงรฃo do projeto Apollo...",
  "attachments": [
    {
      "filename": "report.pdf",
      "mimeType": "application/pdf",
      "size": 524288,
      "attachmentId": "ANGjdJ8xK9mN2pQ3r4s",
      "isInline": false
    }
  ]
}

Anexos e Imagens

O Gmail CLI agora exibe informaรงรตes sobre anexos e imagens inline, incluindo:

  • Nome do arquivo
  • Tipo MIME
  • Tamanho
  • ID de anexo (para download futuro)

Modo Humano - Email com Anexo

gmail read 18abc123def456

Saรญda:

Reading message: 18abc123def456
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Email Details โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ Subject: Monthly Report                             โ”‚
โ”‚ From: reports@company.com                           โ”‚
โ”‚ Date: 2025-11-15T10:30:00Z                          โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Body:
Please find attached the monthly report.

Attachments:
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Filename   โ”ƒ Type            โ”ƒ Size   โ”ƒ Attachment ID      โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ report.pdf โ”‚ application/pdf โ”‚ 512 KB โ”‚ ANGjdJ8xK9mN2pQ... โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Modo Agente - Email com Anexo

gmail read 18abc123def456 --json

Saรญda:

{
  "id": "18abc123def456",
  "subject": "Monthly Report",
  "from": "reports@company.com",
  "date": "2025-11-15T10:30:00Z",
  "body": "Please find attached the monthly report.",
  "attachments": [
    {
      "filename": "report.pdf",
      "mimeType": "application/pdf",
      "size": 524288,
      "attachmentId": "ANGjdJ8xK9mN2pQ3r4sT5uV6w",
      "isInline": false
    }
  ]
}

Nota: Imagens inline (aquelas embutidas no corpo do email) sรฃo marcadas com "isInline": true e incluem um contentId para referรชncia.

Download de Anexos

Vocรช pode fazer download de anexos de duas formas: por Attachment ID ou por Filename (mais fรกcil!).

Mรฉtodo 1: Download por Filename (Recomendado)

A forma mais simples - basta saber o nome do arquivo:

# 1. Buscar emails com anexos
gmail search "has:attachment" --limit 5

# 2. Fazer download direto pelo nome do arquivo
gmail download <MESSAGE_ID> --by-name "report.pdf"

Exemplo:

gmail download 18abc123def456 --by-name "invoice.pdf"

Saรญda:

Downloading attachment...
Searching for attachment: invoice.pdf
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Attachment Downloaded โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ โœ“ Download successful!                              โ”‚
โ”‚                                                      โ”‚
โ”‚ File: invoice.pdf                                   โ”‚
โ”‚ Location: /home/user/Downloads/invoice.pdf          โ”‚
โ”‚ Size: 512.00 KB                                     โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Com opรงรตes adicionais:

# Pasta customizada
gmail download <MSG_ID> --by-name "data.csv" --output-dir /tmp

# Modo JSON
gmail download <MSG_ID> --by-name "report.pdf" --json

Mรฉtodo 2: Download por Attachment ID

Alternativamente, vocรช pode usar o attachment ID:

# 1. Buscar emails com anexos
gmail search "has:attachment" --limit 5

# 2. Ler o email e obter o Attachment ID
gmail read <MESSAGE_ID>

# 3. Fazer download do anexo
gmail download <MESSAGE_ID> <ATTACHMENT_ID>

Por padrรฃo, os arquivos sรฃo salvos em ~/Downloads.

Download com Pasta Customizada

gmail download 18abc123def456 ANGjdJ8xK9mN2pQ3r4sT5uV6w --output-dir /tmp/attachments
# ou
gmail download 18abc123def456 --by-name "report.pdf" --output-dir /tmp/attachments

Download com Nome Customizado

gmail download 18abc123def456 ANGjdJ8xK9mN2pQ3r4sT5uV6w --filename relatorio_mensal.pdf

Modo Agente - Download JSON

gmail download 18abc123def456 --by-name "report.pdf" --json

Saรญda:

{
  "success": true,
  "filepath": "/home/user/Downloads/report.pdf",
  "filename": "report.pdf",
  "size": 524288,
  "message_id": "18abc123def456",
  "attachment_id": "ANGjdJ8xK9mN2pQ3r4sT5uV6w"
}

๐Ÿค– Exemplos para Agentes de IA

Criamos exemplos prรกticos de como agentes de IA podem usar o Gmail CLI:

Veja mais detalhes em examples/README.md.

๐Ÿ”ง Troubleshooting

Erro de Autenticaรงรฃo

Problema: Error: credentials not found ou Token expired

Soluรงรฃo:

gmail auth login --credentials /caminho/para/credentials.json

Comando gmail nรฃo encontrado

Problema: Apรณs instalaรงรฃo, o comando nรฃo estรก disponรญvel

Soluรงรฃo:

# Certifique-se de que ~/.local/bin estรก no PATH
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# Ou reinstale
pipx install --force git+https://github.com/ayrtonnotrya/gmail-cli.git

Nenhum resultado na busca

Problema: Busca retorna lista vazia

Soluรงรฃo:

  • Verifique se a query estรก correta
  • Tente uma query mais ampla (ex: gmail search "is:inbox" --limit 5)
  • Verifique se vocรช tem permissรฃo de leitura no Gmail

Erro ao ler email

Problema: Message not found

Soluรงรฃo:

  • Verifique se o MESSAGE_ID estรก correto
  • Use gmail search primeiro para obter IDs vรกlidos
  • Certifique-se de que vocรช tem acesso ao email

๐Ÿ’ป Desenvolvimento

git clone https://github.com/ayrtonnotrya/gmail-cli.git
cd gmail-cli
poetry install
poetry run gmail --help

๐Ÿค Contribuiรงรฃo

Contribuiรงรตes sรฃo bem-vindas! Por favor, leia nosso Guia de Contribuiรงรฃo para detalhes sobre nosso padrรฃo de commits (PT-BR) e fluxo de desenvolvimento.

๐Ÿ“„ Licenรงa

Distribuรญdo sob a licenรงa MIT. Veja LICENSE para mais informaรงรตes.

About

Um wrapper CLI do Gmail otimizado para Agentes de IA (JSON) e Humanos (TUI). Feito com Typer e Rich.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages