Repository navigation
Home > E-mail
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Nível: iniciante
Em uma frase: o pacote de e-mail do RAL monta e lê mensagens (MIME), envia por SMTP com as técnicas que poupam idas e voltas, guarda numa fila que sobrevive a reinício, assina com DKIM e recebe e-mail com um servidor SMTP próprio, tudo em Pascal.
Você vai precisar: RAL 2.0 com o pacote RALModuleMailPackage instalado (e o
RALModuleMailDsgn para a IDE). Ele requer o RALNetPackage (os sockets do RAL), o
RALCryptoCurvesPackage (Ed25519 do DKIM) e o RALHostingJobQueuePackage (a fila).
Para TLS, a OpenSSL 1.1 ou 3 ao lado do executável (dependências).
| componente | paleta | para |
|---|---|---|
TRALMailMessage |
(classe) | a mensagem: remetente, destinatários, assunto, texto, HTML, anexos |
TRALSMTPClient |
RAL - Client | enviar por SMTP (envio) |
TRALMailQueue |
RAL - Client | enviar em segundo plano, com novas tentativas (envio) |
TRALDKIMSigner |
RAL - Client | assinar o que sai com DKIM (envio) |
TRALSMTPServer |
RAL - Server | receber e-mail (servidor) |
TRALDKIMVerifier |
RAL - Server | conferir a assinatura DKIM do que chega (servidor) |
TRALMailVerifier |
RAL - Server | SPF, DKIM e DMARC do que chega (verificação) |
TRALIMAPClient |
RAL - Client | ler e organizar uma caixa postal por IMAP (caixa postal) |
TRALPOP3Client |
RAL - Client | baixar e apagar mensagens por POP3 (caixa postal) |
TRALDNSResolver |
RAL - Client | consultas de DNS (A, AAAA, MX, TXT) com cache (verificação) |
uses RALMailMIME;
var
vMsg: TRALMailMessage;
begin
vMsg := TRALMailMessage.Create;
try
vMsg.From.Add('vendas@minhaempresa.com.br', 'Vendas');
vMsg.Recipients.Add('cliente@exemplo.com', 'José da Silva');
vMsg.CC.Add('gerente@minhaempresa.com.br');
vMsg.BCC.Add('arquivo@minhaempresa.com.br');
vMsg.Subject := 'Seu pedido nº 1234';
vMsg.Text := 'Olá, José.' + sLineBreak + 'Segue a nota fiscal.';
vMsg.HTML := '<p>Olá, <b>José</b>.</p><p>Segue a nota fiscal.</p>';
vMsg.Attachments.AddFile('C:\notas\1234.pdf');
vMsg.SaveToFile('pedido.eml'); // abre no Outlook ou no Thunderbird
finally
vMsg.Free;
end;
end;- Com
TexteHTMLa mensagem sai comomultipart/alternative: cada programa de e-mail mostra a versão que sabe mostrar. -
Attachments.AddInline(arquivo, 'logo')põe uma imagem dentro do HTML (<img src="cid:logo">). - Acentos no assunto, nos nomes e nos anexos são codificados como as normas pedem
(RFC 2047 e 2231); o texto vai em quoted-printable, ou em UTF-8 puro quando o
servidor aceita (
8BITMIME). -
Bccnunca vai no cabeçalho: só no envelope do envio. -
LoadFromFile/LoadFromStreamleem uma mensagem recebida (.eml); um anexo grande vai para um arquivo temporário em vez da memória (acima deSpoolAbove). -
MessageIDeDatevazios são preenchidos quando a mensagem é gravada ou enviada.
| sintoma | causa | o que fazer |
|---|---|---|
a mensagem chega como lixo (=C3=A9) |
um programa que exibe o texto cru | abra com um programa de e-mail; o RAL segue a norma |
| anexo chega sem nome | o nome tinha caracteres que o programa do destinatário não entende | ele vem codificado pela RFC 2231; programas antigos ignoram |
| o destinatário vê o Bcc | (não acontece) | o RAL nunca escreve o cabeçalho Bcc |
-
Enviar e-mail:
TRALSMTPClient, fila e DKIM -
Receber e-mail:
TRALSMTPServer - Ler a caixa postal: IMAP e POP3
- Verificar o que chega: SPF, DKIM e DMARC
- Fila de jobs: a fila em que a de e-mail se apoia
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 🚧
- 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 🚧
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