Guide
Outlook CLI: enviar e-mail pelo terminal
Use um CLI Outlook para enviar e-mail Microsoft 365 pelo terminal sem configurar Graph API, registrar app Azure AD, escrever código MSAL ou configurar SMTP. Este guia cobre envio, agendamento, corpo HTML, saída JSON e fluxos de caixa compartilhada pelo terminal sem criar um app Azure AD para cada operação.
Written by Caleb Geene Director, Site Reliability Engineering
Reviewed by Hazik
Como usar um CLI Outlook para enviar e-mail pelo terminal?
Conecte o Outlook ou Microsoft 365 uma vez e envie com nylas email send --to user@example.com --subject "Hello" --body "Hi" --yes. Isso dá a você um workflow de envio Outlook pelo CLI sem registrar um app Azure AD, configurar MSAL ou configurar SMTP.
O mesmo comando atende exatamente ao caso de uso de envio de e-mail Outlook por linha de comando que normalmente leva desenvolvedores ao registro de app na Graph API ou à configuração de credenciais SMTP.
O problema de enviar e-mail Outlook programaticamente começa no fluxo de configuração da Microsoft.
Enviar e-mail Outlook programaticamente requer 4-5 etapas de configuração no ecossistema Microsoft: registrar um aplicativo Azure AD, configurar permissões de API Mail.Send, obter consentimento do administrador, integrar a biblioteca de autenticação MSAL e gerenciar refresh de tokens. Para um envio avulso pelo terminal ou script shell, essa sobrecarga transforma uma tarefa de 10 segundos em um projeto de 45 minutos.
O caminho recomendado pela Microsoft é o endpoint /sendMail da Graph API. Segundo a documentação OAuth 2.0 da Microsoft, os tokens de acesso expiram após 60-90 minutos e exigem rotação de refresh tokens.
Para um envio rápido pelo terminal ou um script shell, isso é configuração demais. SMTP via smtp.office365.com na porta 587 ainda funciona, mas a Microsoft descontinuou Basic Auth para Exchange Online em outubro de 2022. Não é mais possível usar usuário/senha.
O Nylas CLI contorna tudo isso. Ele se comunica com a API Nylas, que gerencia refresh de tokens OAuth2, roteamento de provedor e gerenciamento de conexão. Autentique uma vez e envie com um único comando.
1. Instalação
O Nylas CLI instala em menos de 30 segundos no macOS, Linux ou Windows e não requer registro de app Azure AD, credenciais Graph API nem biblioteca MSAL. O binário é um executável Go único com menos de 20 MB que detecta automaticamente sua plataforma e arquitetura durante a instalação.
No macOS ou Linux, instale via Homebrew. No Windows — onde mais de 80% dos usuários desktop do Outlook rodam, segundo a Statcounter — use o one-liner do PowerShell. Ambos os métodos verificam checksums SHA-256 automaticamente. Veja o guia de primeiros passos para opções adicionais de instalação.
2. Autentique sua conta Outlook
A autenticação conecta o Nylas CLI à sua caixa de correio Outlook ou Microsoft 365 por meio de um único fluxo OAuth2, substituindo o registro de app Azure AD em múltiplas etapas que a Graph API exige. O processo inteiro leva cerca de 2 minutos e armazena as credenciais de forma segura no keyring do sistema para que você não precise reautenticar a cada comando.
Acesse dashboard-v3.nylas.com, crie um aplicativo e conecte sua caixa de correio Outlook ou M365. Em seguida, configure o CLI com sua chave de API. Segundo a documentação OAuth 2.0 da Microsoft, os tokens de acesso expiram após 60-90 minutos — o Nylas gerencia o refresh automaticamente em segundo plano.
nylas auth config
# Cole sua chave de API quando solicitado
# Verifique a conexão
nylas auth whoami
# => Authenticated as you@company.com (Microsoft)As credenciais ficam armazenadas no keyring do sistema operacional (macOS Keychain, Windows Credential Manager ou Linux libsecret). Você não precisará reautenticar, a menos que revogue o grant.
3. Envie de uma caixa de usuário, alias ou caixa compartilhada
Organizações Microsoft 365 normalmente gerenciam 3-5 tipos de identidade de caixa de correio por departamento — caixas de usuário, caixas compartilhadas, grupos de distribuição, salas de recursos e aliases de envio como. O Nylas CLI envia de qualquer uma dessas identidades apontando para o grant ID correto. A pergunta central não é apenas "posso enviar uma mensagem?" — é "de qual identidade de caixa de correio esta mensagem deve sair?"
Para enviar da sua caixa Outlook pessoal, execute o comando sem um grant ID — o CLI usa sua caixa autenticada padrão. Para enviar de uma caixa compartilhada ou identidade de departamento, passe o grant ID da caixa compartilhada como primeiro argumento. Cada grant mapeia exatamente para uma identidade de caixa de correio no Exchange Online.
# Enviar da sua própria caixa Outlook
nylas email send \
--to "colleague@company.com" \
--subject "Q2 planning doc" \
--body "Hi — the planning doc is ready for review." \
--yes
# Enviar de um grant de caixa compartilhada
nylas email send <shared-mailbox-grant-id> \
--to "vendor@partner.com" \
--subject "PO #4521" \
--body "Purchase order 4521 is ready for review." \
--yesSe as permissões de send-as ou caixa compartilhada estiverem ausentes, o Microsoft 365 retorna um erro 403 e rejeita o envio, mesmo que a sintaxe do comando esteja correta. Segundo a documentação de permissões do Exchange Online da Microsoft, alterações de delegação de caixa compartilhada podem levar até 60 minutos para propagar. Esse erro é um problema de política do Exchange Online, não do CLI.
4. Listas de distribuição, aliases e filas de equipe
Listas de distribuição e grupos M365 do Microsoft 365 expandem para todas as caixas de correio dos membros no lado do servidor, o que significa que um único comando nylas email send pode alcançar centenas de destinatários sem resolução de endereços no lado do cliente. Empresas com mais de 500 funcionários geralmente mantêm 20-50 listas de distribuição para departamentos, equipes de projeto e roteamento de conformidade. O Nylas CLI envia para essas listas da mesma forma que envia para endereços individuais — especificando o endereço da lista na flag --to.
Os exemplos abaixo mostram dois padrões comuns: broadcast para uma lista de distribuição de engenharia e roteamento de uma atualização de contrato para o jurídico via CC com um BCC de conformidade. A flag --bcc mantém os endereços de conformidade ou journaling ocultos da lista de destinatários visíveis, o que é um requisito frequente em setores regulados como finanças e saúde.
# Enviar para uma lista de distribuição
nylas email send \
--to "engineering-all@company.com" \
--subject "Deployment window tonight" \
--body "Production deploy starts at 22:00 UTC. Freeze all PRs by 21:00." \
--yes
# Incluir destinatários de conformidade ou arquivo
nylas email send \
--to "contracts@company.com" \
--cc "legal@company.com" \
--bcc "compliance@company.com" \
--subject "Contract update" \
--body "Updated terms are ready for review in the contract system." \
--yes5. Corpo HTML e e-mails de workflow empresarial
E-mails empresariais do Outlook frequentemente carregam faturas, aprovações, termos de trabalho e atualizações de compras. O comando de envio atual do CLI aceita HTML via --body, suporta templates hospedados via --template-id e mantém a entrega de arquivos separada: publique o arquivo no seu sistema de documentos e envie o link, ou use a API/SDK Nylas quando um anexo MIME for necessário.
O motor de renderização do Outlook processa HTML pelo parser HTML do Microsoft Word, então algumas propriedades CSS renderizam de forma diferente do Gmail ou Apple Mail. Mantenha corpos HTML automatizados pequenos, inline os estilos essenciais e deixe as regras de DLP e transporte no nível do tenant inspecionarem a mensagem final após o envio.
nylas email send \
--to "client@example.com" \
--subject "Invoice #1042" \
--body "<h1>Invoice #1042</h1><p>Amount due: <strong>$2,400.00</strong></p><p>Payment link: <a href='https://pay.example.com/1042'>pay.example.com/1042</a></p>" \
--yes6. Agendar entrega e respeitar os limites do Microsoft 365
O agendamento de entrega de e-mail no Microsoft 365 permite compor uma mensagem agora e enviá-la em um horário futuro específico, o que é útil para alcançar destinatários em fusos horários diferentes ou enfileirar follow-ups fora do horário comercial. O Microsoft 365 impõe um limite de 30 mensagens por minuto e 10.000 destinatários por dia na maioria dos planos, então loops de envio em massa ou automatizados precisam de ritmo deliberado para evitar bloqueios temporários.
A flag --schedule aceita expressões de tempo em linguagem natural como "tomorrow 9am" ou "next Monday 2pm EST". Para loops de envio em massa, um sleep de 2 segundos entre envios mantém você bem abaixo do teto de 30 mensagens por minuto da Microsoft e evita acionar o bloqueio temporário de envio que dura até 24 horas.
# Agendar um follow-up
nylas email send \
--to "client@example.com" \
--subject "Follow-up" \
--body "Checking in on the proposal." \
--schedule "tomorrow 9am" \
--yes
# Limitar a taxa de um loop de automação de caixa de correio
while read -r recipient; do
nylas email send --to "$recipient" --subject "Status update" --body "See attached notes." --yes
sleep 2
done < recipients.txt7. Saída JSON para scripts e trilhas de auditoria
Adicionar --json a qualquer comando nylas email send retorna o objeto de mensagem completo como JSON estruturado, incluindo ID da mensagem, grant ID, thread ID, timestamps e endereços de remetente/destinatário. Essa saída é útil para registrar eventos de envio, alimentar IDs de mensagem em processadores de fila downstream ou atender trilhas de auditoria de conformidade que exigem prova de tentativa de entrega com timestamps exatos.
A resposta JSON normalmente pesa 400-600 bytes por mensagem e segue o schema de mensagem da API Nylas. Passar a saída por jq extrai campos específicos — o ID da mensagem para rastreamento, o thread ID para threading de conversa ou a data para logs de auditoria.
nylas email send \
--to "user@example.com" \
--subject "Test" \
--body "Hello." \
--json --yes{
"id": "a1b2c3d4e5f6g7h8",
"grant_id": "d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8",
"thread_id": "x9y8z7w6v5u4t3s2",
"subject": "Test",
"from": [{"name": "Dev User", "email": "dev@company.com"}],
"to": [{"name": "", "email": "user@example.com"}],
"date": "2026-03-28T10:30:00-04:00",
"object": "message"
}Em scripts shell, você pode capturar o ID da mensagem da saída JSON usando jq e usá-lo para processamento downstream — verificar status de entrega, anexar a um CSV de auditoria ou passar para um sistema de tickets. O campo .id é uma string única de 16 caracteres que mapeia para a mensagem na API Nylas.
# Capturar o ID da mensagem após o envio
msg_id=$(nylas email send \
--to "user@example.com" \
--subject "Automated" \
--body "This is automated." \
--json --yes | jq -r '.id')
echo "Sent message: $msg_id"Graph API vs. Nylas CLI
A Microsoft Graph API requer 50-100 linhas de código Python ou Node.js para enviar um único e-mail Outlook quando você inclui registro de app Azure AD, aquisição de token MSAL, tratamento de refresh de token e o POST request em si. O Nylas CLI reduz isso a 1 comando com zero linhas de código e nenhuma configuração no portal Azure. A comparação abaixo detalha cada etapa nas duas abordagens.
| Etapa | Graph API | Nylas CLI |
|---|---|---|
| Registro de app | Portal Azure AD, configurar redirect URIs | Não necessário |
| Permissões | Adicionar Mail.Send, obter consentimento do admin | Não necessário |
| Autenticação | Biblioteca MSAL, adquirir tokens, gerenciar refresh | nylas auth config (uma vez) |
| Enviar e-mail | POST para /me/sendMail com corpo JSON | nylas email send --to ... |
| Entrega de arquivos | Codificar em Base64 no JSON, sessão de upload para >3 MB | Envie um link, ou use a API/SDK Nylas para anexos |
| Refresh de token | Tratar 401, rotacionar refresh tokens | Automático |
| Multi-provedor | Somente Microsoft | Gmail, Outlook, Exchange, Yahoo, iCloud, IMAP |
| Linhas de código | 50-100+ (Python/Node com MSAL) | 1 comando |
Dicas específicas para Outlook
O Microsoft 365 tem políticas no nível do tenant, recursos de conformidade e tipos de caixa de correio que não existem em provedores de e-mail de consumo como Gmail ou Yahoo. As dicas a seguir cobrem comportamentos específicos do Outlook — confirmações de leitura, rótulos de sensibilidade, caixas compartilhadas, limites de envio e regras de transporte — que afetam como o e-mail enviado é processado depois que sai do CLI.
Confirmações de leitura
O Outlook suporta solicitações de confirmação de leitura via header Disposition-Notification-To. Quando você envia pelo Nylas CLI, o cliente Outlook do destinatário pode solicitar o envio de uma confirmação de leitura dependendo das configurações. Segundo a documentação da Microsoft, os destinatários podem recusar solicitações de confirmação de leitura, então não dependa delas para confirmação de entrega em workflows automatizados.
Rótulos de sensibilidade
Rótulos de sensibilidade do M365 (Confidential, Internal, etc.) são aplicados no nível do tenant pelo Microsoft Information Protection. Mensagens enviadas pelo Nylas CLI respeitam a política de rotulagem padrão do seu tenant. Se sua organização exige um rótulo específico, seu administrador Exchange pode configurar regras de auto-rotulagem que se aplicam a todos os e-mails de saída, independentemente do cliente de envio.
Envio por caixa compartilhada
Para enviar de uma caixa compartilhada, conecte-a como um grant separado pelo fluxo OAuth. Cada caixa compartilhada recebe seu próprio grant ID, e você referencia esse ID ao enviar. A conta de usuário que conecta a caixa compartilhada deve ter permissões Full Access ou Send As no Exchange Online — alterações de delegação podem levar até 60 minutos para propagar.
# Conectar a caixa compartilhada
nylas auth login
# Siga o fluxo OAuth para a caixa compartilhada
# Enviar da caixa compartilhada usando seu grant ID
nylas email send <shared-mailbox-grant-id> \
--to "vendor@partner.com" \
--subject "PO #4521" \
--body "Purchase order 4521 is ready for review."Limites de envio do Outlook
O Microsoft 365 impõe um limite de 10.000 destinatários por dia e 30 mensagens por minuto para a maioria dos planos. Segundo a documentação de limites do Exchange Online da Microsoft, exceder esses limites aciona um bloqueio temporário. Para envios em massa, adicione um sleep 2 entre as mensagens no seu script.
Regras de transporte, journaling e política de send-as
Os fluxos de e-mail do Microsoft 365 são moldados por regras do Exchange Online no nível do tenant que processam mensagens antes de chegarem ao destinatário. Regras de transporte podem redirecionar, bloquear ou modificar mensagens com base em remetente, destinatário, assunto ou padrões de conteúdo. Journaling copia todos os e-mails para uma caixa de conformidade. Políticas de DLP escaneiam anexos e conteúdo do corpo contra mais de 100 tipos de informações sensíveis integrados. Segundo a documentação de regras de fluxo de e-mail da Microsoft, regras de transporte são avaliadas em ordem de prioridade, e a primeira regra correspondente pode interromper o processamento subsequente.
Se um envio Outlook se comporta de forma diferente em duas caixas de correio, a causa geralmente é política de caixa de correio ou política de roteamento do tenant, não a sintaxe do comando CLI.
Workflows de caixa compartilhada e filas de equipe
Organizações Microsoft 365 usam caixas compartilhadas para compras, suporte, recrutamento e operações executivas. Segundo a documentação de caixas compartilhadas da Microsoft, caixas compartilhadas não exigem uma licença separada para caixas abaixo de 50 GB. Enviar de support@company.com ou ap@company.com pelo Nylas CLI funciona conectando a caixa compartilhada como um grant separado e especificando seu grant ID no comando de envio.
Próximos passos
Depois de conseguir enviar e-mails Outlook pelo terminal, você pode expandir seu workflow para leitura e filtragem da caixa de entrada Outlook, gerenciamento de eventos de calendário, conexão de agentes de IA à sua caixa de correio ou troca para um provedor diferente — o Nylas CLI suporta 6 provedores com a mesma sintaxe de comando.
- Enviar e-mail pelo terminal — guia multi-provedor cobrindo Linux, macOS e Windows
- Listar e-mails Outlook pelo terminal — leia, busque e filtre sua caixa de entrada Outlook
- Gerenciar calendário Outlook pelo CLI — crie eventos, verifique disponibilidade, agende reuniões
- Dar acesso a e-mail para agentes de IA via MCP — conecte Claude, Cursor ou VS Code à sua caixa Outlook
- Referência completa de comandos — todas as flags e subcomandos documentados