Repository navigation
email caixas servidor
mobius1qwe edited this page Nov 13, 2026
·
1 revision
Home > E-mail > Servir caixas postais
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Nível: avançado
Em uma frase: com TRALMailStore, TRALPOP3Server e TRALIMAPServer a sua
aplicação guarda as mensagens que o servidor SMTP recebe e as entrega
a qualquer programa de e-mail (Thunderbird, Outlook, o celular) por POP3 e IMAP.
Você vai precisar: o pacote RALModuleMailPackage (e-mail); um certificado
para TLS (arquivo PEM ou o certificado automático) e a
OpenSSL ao lado do executável.
uses RALSMTPServer, RALMailStore, RALPOP3Server, RALIMAPServer;
FCaixas := TRALMailStore.Create(Self);
FCaixas.Folder := 'C:\MeuApp\caixas';
FSMTP.OnMessage := MensagemChegou; // o TRALSMTPServer de "Receber e-mail"
FIMAP := TRALIMAPServer.Create(Self); // 143 (STARTTLS) e 993 (TLS)
FIMAP.Store := FCaixas;
FIMAP.SSL.CertFile := 'C:\MeuApp\cert.pem';
FIMAP.SSL.KeyFile := 'C:\MeuApp\key.pem';
FIMAP.SSL.Enabled := True;
FIMAP.Users.Add('ana=senha');
FIMAP.Active := True;
FPOP3 := TRALPOP3Server.Create(Self); // 110 (STLS) e 995 (TLS)
FPOP3.Store := FCaixas;
... // as mesmas propriedades
FPOP3.Active := True;
procedure TForm1.MensagemChegou(Sender: TObject; ASession: TRALSMTPSession;
AEnvelope: TRALSMTPEnvelope; AData: TStream; var ACode: IntegerRAL;
var AReply: StringRAL);
var
vInt: Integer;
begin
// na caixa de entrada de cada destinatário que é seu
for vInt := 0 to AEnvelope.Recipients.Count - 1 do
begin
AData.Position := 0;
FCaixas.Deliver(UsuarioDe(AEnvelope.Recipients[vInt]), AData);
end;
end;- Uma pasta por usuário e uma por caixa postal, um arquivo por mensagem e um índice com os UIDs e as marcações. Reiniciar o programa mantém tudo, com os mesmos UIDs.
- O índice é gravado num arquivo novo e trocado de uma vez: um programa que cai no meio não corrompe a caixa; se o índice se perder, ele é refeito a partir das mensagens.
- Os métodos (
Append,Deliver,ListMessages,OpenMessage,CopyMessages,MoveMessages,Expunge...) servem também para o seu próprio código: um painel web que mostra a caixa, por exemplo. - Uma pasta de armazenamento é de um processo só.
-
IMAP (IMAP4rev2 e rev1): pastas, busca, marcações, cópia,
MOVE,IDLE(o programa de e-mail é avisado em menos de um segundo quando chega mensagem),UIDPLUS. - POP3: lista, baixa e apaga; o que foi marcado para apagar só some quando o programa encerra a sessão.
-
Login: como no servidor SMTP, passa pelos plugins de autenticação
e de segurança do servidor; sem plugin, vale
Users. SCRAM-SHA-256 é aceito sem TLS (a senha não atravessa a rede); PLAIN, LOGIN e USER/PASS só com TLS. - O verbo "Testar portas" (clique direito) diz se as portas abrem e se o certificado carrega.
| sintoma | causa | o que fazer |
|---|---|---|
| o Thunderbird não aceita o certificado | certificado autoassinado ou de outro nome | um certificado do domínio (certificado automático) |
| "Login failed" com a senha certa | PLAIN/LOGIN numa porta sem TLS | use 993/995, ou STARTTLS |
| duas instâncias do programa e mensagens sumindo | duas aplicações na mesma pasta | uma pasta por processo |
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Serviços (contêiner de dependências) 🚧
- Barramento de eventos 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
E-mail 🚧
- Mensagens 🚧
- Enviar 🚧
- Receber 🚧
- Ler a caixa postal 🚧
- Verificar o que chega 🚧
- Servir caixas postais 🚧
- S/MIME 🚧
- OpenPGP 🚧
Chatbot 🚧
- O robô e os canais 🚧
- Telegram 🚧
- Gateways REST (WhatsApp não oficial) 🚧
- Discord 🚧
- Slack 🚧
- Microsoft Teams 🚧
- Conversa em etapas 🚧
Cliente
Motores
- Qual motor escolher?
- Compatibilidade
- Recursos
- QUIC
- Motor NgHttp2 (HTTP/2) 🚧
- Motor XSocket 🚧
- Motor AdvancedHTTP (experimental) 🚧
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar