> ## Documentation Index
> Fetch the complete documentation index at: https://docs.airys.chat/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurando e-mails de entrada no AirysChat

> Guia para configurar e-mails de entrada no AirysChat

O AirysChat usa o [Rails Action Mailbox](https://edgeguides.rubyonrails.org/action_mailbox_basics.html) para receber e-mails de entrada. O Action Mailbox suporta vários provedores de "ingresso" nativamente, e o AirysChat é construído com base nisso.

Este guia o orienta através de:

* Escolher e configurar um provedor de e-mail de entrada (ingresso)
* Configurar as variáveis de ambiente necessárias
* Usar Mailgun, SendGrid, Mandrill e servidores de relay locais (Exim, Postfix, Qmail, Postmark)

Provedores de ingresso suportados atualmente:

* Amazon SES
* SendGrid
* Mandrill
* Mailgun
* Exim
* Postfix
* Qmail
* Postmark

## 1. Configure o serviço de ingresso

Primeiro, informe ao AirysChat qual serviço de e-mail de entrada (ingresso) você está usando. Isso é feito por meio da variável de ambiente `RAILS_INBOUND_EMAIL_SERVICE`.

```bash theme={null}
# Set this to the appropriate ingress service. Options:
# "relay"    for Exim, Postfix, Qmail, Postmark
# "mailgun"  for Mailgun
# "mandrill" for Mandrill
# "sendgrid" for SendGrid
# "ses" for Amazon SES
RAILS_INBOUND_EMAIL_SERVICE=relay
```

Este valor configura como o Action Mailbox fará a autenticação e roteará as mensagens de entrada para o AirysChat.

### Usando um relay local (Postfix / Exim / Qmail / Postmark)

Se você estiver usando um MTA local (por exemplo, Postfix) tanto para o relay de entrada quanto para o e-mail de saída, e você **não deseja** usar a autenticação SMTP (SASL) — o que é comum quando o servidor lida apenas com seu próprio e-mail — você precisará ajustar sua configuração SMTP de saída.

Por padrão, o Action Mailer tentará usar a autenticação SMTP se as seguintes variáveis de ambiente estiverem presentes:

* `SMTP_AUTHENTICATION`
* `SMTP_USERNAME`
* `SMTP_PASSWORD`

Se você estiver enviando e-mails por meio de um relay local que não requer autenticação:

1. Remova ou comente essas variáveis do seu arquivo `.env`.
2. Certifique-se de que seu MTA local esteja configurado corretamente para enviar e-mails de saída.

> ⚠️ **Importante:** Executar seu próprio servidor de e-mail traz responsabilidades de entrega e segurança:
>
> * Muitos ISPs bloqueiam ou restringem servidores de e-mail em suas redes.
> * Configure os registros DNS corretos (SPF, DKIM, DMARC) para que seus e-mails sejam aceitos pelos destinatários e não caiam na caixa de spam.

## 2. Configure a autenticação de ingresso

Em seguida, defina as credenciais correspondentes ao provedor de ingresso que você está usando.

```bash theme={null}
# Use one of the following based on the email ingress service

# For SendGrid, Exim, Postfix, Qmail, or Postmark
RAILS_INBOUND_EMAIL_PASSWORD=

# For Mailgun
MAILGUN_INGRESS_SIGNING_KEY=

# For Mandrill
MANDRILL_INGRESS_API_KEY=
```

Apenas a variável relevante para o provedor escolhido precisa ser configurada.

## 3. Configuração específica do provedor

### Amazon SES

Se você estiver usando o Amazon SES como seu provedor de e-mail, você deve configurar o provedor de ingresso como `ses` e definir `ACTION_MAILBOX_SES_SNS_TOPIC` para o ARN do tópico SNS da sua conta SES.

Veja mais detalhes [aqui](./amazon-ses-ingress).

### Mailgun

Se você estiver usando o Mailgun como seu provedor de e-mail:

1. No seu DNS, configure os **registros MX** para o seu domínio apontarem para o Mailgun.
2. No painel do Mailgun, configure o roteamento para que os e-mails de entrada sejam encaminhados para:

```text theme={null}
https://example.com/rails/action_mailbox/mailgun/inbound_emails/mime
```

Substitua `example.com` pelo domínio onde a sua instalação do AirysChat está hospedada.

#### Obtendo a chave de assinatura de ingresso do Mailgun

Você pode encontrar a chave de assinatura no painel do Mailgun e defini-la como `MAILGUN_INGRESS_SIGNING_KEY`.

<img src="https://mintcdn.com/airys/8PgT_S4ekmZVDkFb/self-hosted/images/mailgun-ingress-key.gif?s=9ba1bfd703e1ee5238764731af7f1000" alt="mailgun-ingress-key" width="3470" height="1500" data-path="self-hosted/images/mailgun-ingress-key.gif" />

### SendGrid

Se você estiver usando o SendGrid:

1. Configure os **registros MX** para o seu domínio (`your-domain.com`) apontarem para o SendGrid.
2. No painel do SendGrid, configure o **Inbound Parse** para encaminhar e-mails de entrada para o endpoint do Action Mailbox.

Use o seguinte padrão como a URL de Inbound Parse:

```bash theme={null}
https://actionmailbox:PASSWORD@example.com/rails/action_mailbox/sendgrid/inbound_emails
```

* Substitua `PASSWORD` pelo valor de `RAILS_INBOUND_EMAIL_PASSWORD`.
* Substitua `example.com` pelo seu host do AirysChat.

> ✅ **Obrigatório:** Ao configurar o webhook do SendGrid Inbound Parse, **habilite** a opção:
>
> **"Post the raw, full MIME message"** (Postar a mensagem MIME crua e completa).
>
> O Action Mailbox deve receber a mensagem MIME bruta para analisar e processar corretamente o e-mail.

Veja um guia detalhado sobre [como configurar o SendGrid Inbound Parse](./conversation-continuity-using-sendgrid).

### Mandrill

Se você estiver usando o Mandrill como seu serviço de e-mail:

1. Configure os registros MX do seu domínio para apontarem para o Mandrill.
2. No painel do Mandrill, configure uma rota de entrada que encaminhe e-mails para:

```text theme={null}
https://example.com/rails/action_mailbox/mandrill/inbound_emails
```

Substitua `example.com` pelo domínio onde a sua instalação do AirysChat está hospedada.

Defina `MANDRILL_INGRESS_API_KEY` com a chave de API apropriada do Mandrill.

## 4. IMAP via getmail

Se você já possui uma caixa de correio IMAP (por exemplo, no seu próprio servidor de e-mail ou em um provedor que não suporte o Action Mailbox diretamente), você ainda pode alimentar o AirysChat com e-mails usando o [getmail6](https://github.com/getmail6/getmail6) e o ingresso HTTP do Action Mailbox.

### Como funciona o ingresso do Action Mailbox

O Action Mailbox expõe endpoints HTTP para cada tipo de ingresso. Eles são definidos no código-fonte do Rails e também podem ser usados diretamente.

Exemplo usando a tarefa rake do Rails:

```bash theme={null}
cat my_incoming_message | ./bin/rails action_mailbox:ingress:postfix \
  RAILS_ENV=production \
  URL=http://localhost:3000/rails/action_mailbox/relay/inbound_emails \
  INGRESS_PASSWORD=...
```

Isso importa o conteúdo de `my_incoming_message` (uma mensagem compatível com [RFC 822](https://datatracker.ietf.org/doc/html/rfc822)) para uma instância do AirysChat sendo executada em `localhost`.

### Chamando o endpoint HTTP diretamente

Em vez de usar a tarefa Rake, você pode chamar o endpoint HTTP de ingresso diretamente via `curl`.

```bash theme={null}
INGRESS_PASSWORD=...
URL=http://localhost:3000/rails/action_mailbox/relay/inbound_emails

curl -sS -u "actionmailbox:$INGRESS_PASSWORD" \
 -A "Action Mailbox curl relayer" \
 -H "Content-Type: message/rfc822" \
 --data-binary @- \
 $URL
```

Isso envia a mensagem bruta de stdin para o endpoint de relay do Action Mailbox.

### Usando getmail6 com IMAP

O [getmail6](https://github.com/getmail6/getmail6) pode recuperar e-mails de uma caixa de correio IMAP e passá-los para o script `curl` acima.

Se o script estiver armazenado em `/home/airyschat/bin/import_mail_to_airyschat`, uma configuração mínima do `getmail` poderia ser assim:

```ini theme={null}
[retriever]
type = SimpleIMAPSSLRetriever
server = ...
username = ...
password = ...

[destination]
type = MDA_external
path = /home/airyschat/bin/import_mail_to_airyschat

[options]
verbose = 0
read_all = false
delete = false
delivered_to = false
received = false
message_log = /home/airyschat/logs/import_imap.log
message_log_syslog = false
message_log_verbose = true
```

### Agendando a recuperação de e-mail

Para importar e-mails continuamente para o AirysChat, você precisará executar o `getmail` regularmente. Opções comuns:

* Use `cron` para executar o `getmail` em um intervalo fixo (por exemplo, a cada minuto).
* Para IMAP, você pode usar:

```bash theme={null}
getmail --idle INBOX
```

Isso mantém uma conexão de longa duração aberta e reage a novos e-mails imediatamente. Você precisará de alguma supervisão (systemd, runit, etc.) para lidar com reinicializações se a conexão for interrompida.

## 5. Leitura adicional

Para mais detalhes sobre a configuração e personalização de ingressos, consulte a documentação oficial do Rails:

* [Action Mailbox Basics – Configuration](https://edgeguides.rubyonrails.org/action_mailbox_basics.html#configuration)
