TInstinct

source/classes/tinstinct.prg

Protótipo de transporte por email para uma aplicação falar com o Instinct do seu próprio utilizador. Não é uma API oficial. Requer um receptor configurado separadamente; enviar email não autoriza ações.

Configuração

Só aceita um relay local (127.0.0.1 ou localhost). O salto externo deve usar TLS e validar certificados. As portas predefinidas são SMTP 25 e POP 110; use nSmtpPort e nPopPort para alterá-las. Configure cPopUser/cPopPassword para uma caixa dedicada às respostas.

Exemplos

oInstinct := TInstinct():New( cFrom, cToken, cTo )
if oInstinct:Send( "Hello Instinct" )
   cAnswer := oInstinct:Answer( 10 )
endif

// Register once, then call Pump() from the application's timer:
oInstinct:OnAnswer( {| cText, cId | MsgInfo( cText, cId ) } )
oInstinct:Pump()

Answer() espera e bloqueia. OnAnswer() regista o bloco; Pump() consulta uma vez a partir de um timer, mas a ligação pode demorar até nTimeout. Não cria uma thread em segundo plano.

samples/instinct/tinstinct.prg: INSTINCT_FROM, INSTINCT_TOKEN, INSTINCT_TO, INSTINCT_POP_USER, INSTINCT_POP_PASSWORD.

Estado e limites

O limite conta mensagens não tratadas, não as primeiras posições da caixa: os UIDL já vistos são ignorados e as chamadas seguintes chegam ao restante email. Answer() conserva respostas de outros IDs em aPending para outro Answer() ou Pump(). A fila vive na instância; use uma única instância por caixa e consuma-a antes de fechar. O email fica no servidor: arquive o tratado para evitar consultas longas.