Skip to content

email caixas servidor

mobius1qwe edited this page Nov 13, 2026 · 1 revision

Home > E-mail > Servir caixas postais

Servir caixas postais (POP3 e IMAP)

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.

Montando

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;

O armazenamento

  • 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ó.

Os servidores

  • 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.

Erros comuns

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

Veja também

Começar

Servidor

MQTT 🚧

E-mail 🚧

Chatbot 🚧

Cliente

Motores

Avançado

Ajuda

🚧 = em desenvolvimento, pode mudar

Clone this wiki locally