Ir para conteúdo
  • Cadastre-se

dev botao

AcbrMail ao enviar o executável para de funcionar


Ver Solução Respondido por Juliomar Marchetti,
  • Este tópico foi criado há 3200 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Não sei se é o seu caso mas comigo acontecem duas situações, que não são culpa do componente:

1 - Durante a autenticação, a locaweb (onde se encontra meu domínio) demora para responder. Por esse motivo, a aplicação aguarda até que o tempo limite seja atingido ou que o servidor de envio aceite o logon.

2 - Quando a quantidade de arquivos à anexar é muito alta, a aplicação aguarda até que cada arquivo da lista seja devidamente inserido. Com apenas um ou com poucos arquivos esse processo é extremamente rápido mas, dependendo do tamanho e da quantidade, pode demorar bastante.

Em ambos os casos, ao clicar em qualquer parte da tela surge essa mensagem, levando o operador a pensar que a aplicação travou. Passei a aumentar o time-out e a desligar o teclado e o mouse até que haja uma falha de tempo excedido (trato com try except) ou que o processamento dos anexos tenha sido concluído. (finally).

Editado por Paulo Tenório
  • Curtir 1
Postado

Fiz o teste no Linux (Ubuntu 64 Ubuntu 14.04.3 LTS), Lazarus 1.4.4 com ACBr trunk2 do SVN.

  1. Criei um novo projeto do zero
  2. Adicionei no form vazio o componente ACBrMail
  3. Pressionei F9
  4. Veio o form vazio; ao clicar em fechar (botão X), TRAVOU. 

A tela não fecha e depois de um tempo fica cinza.

 

Fiz um debug passo a passo, travou na seguinte linha de código:

procedure TACBrMail.Clear;
begin
  ClearAttachments;
  fSMTP.Reset; { <============= AQUI }
  fMIMEMess.Header.Clear;
  fMIMEMess.Clear;
  fReplyTo.Clear;
  fBCC.Clear;
  fSubject := '';
  fBody.Clear;
  fAltBody.Clear;
end;

 

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

Postado

Aquele comando

fSMTP.Reset

já entra na Synapse. O travamento ocorre na seguinte procedure:

function TSMTPSend.ReadResult: Integer;
var
  s: String;
begin
  Result := 0;
  FFullResult.Clear;
  repeat
    s := FSock.RecvString(FTimeout);  { <============= AQUI }
    FResultString := s;
    FFullResult.Add(s);
    if FSock.LastError <> 0 then
      Break;
  until Pos('-', s) <> 4;
  s := FFullResult[0];
  if Length(s) >= 3 then
    Result := StrToIntDef(Copy(s, 1, 3), 0);
  FResultCode := Result;
  EnhancedCode(s);
end;

 

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

Postado

Não comandei nada, apenas larguei o componente na tela, executei e mandei fechar via botão "X" do formulário.

O fSMTP.Reset que trava está no código da TACBrMail.Clear, que é chamada pelo destrutor:

destructor TACBrMail.Destroy;
begin
  Clear;
  fAltBody.Free;
  fBody.Free;
  fBCC.Free;
  fReplyTo.Free;
  fMIMEMess.Free;
  fSMTP.Free;

  inherited Destroy;
end;

Comentei a linha do fSMTP.Reset e não travou, mas imagino que esse Reset seja necessário.

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

Postado

#0 RESET(0x7ffff7fe6400) at ../../../Fontes/Terceiros/synalist/smtpsend.pas:484
#1 CLEAR(0x7ffff7eb1160) at ../../../Fontes/ACBrTCP/ACBrMail.pas:347
#2 DESTROY(0x7ffff7eb1160, 0x1) at ../../../Fontes/ACBrTCP/ACBrMail.pas:414
#3 CLASSES_TCOMPONENT_$__DESTROYCOMPONENTS at :0
#4 ?? at :0
#5 gtk_text_iter_get_type@plt at :0
#6 ?? at :0
#7 CLASSES_TCOMPONENT_$__DESTROY at :0
#8 ?? at :0
#9 gtk_text_iter_get_type@plt at :0
#10 ?? at :0
#11 ?? at :0
 

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

  • Fundadores
Postado

Obrigado pela analise... possível correção enviada para o SVN

Citar

-- ACBrMail --
[-] Correção para Destruição de TACBrMail, não chamar "SMTP.Reset"
    http://www.projetoacbr.com.br/forum/index.php?showtopic=27427

 

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Mas nem executei meu projeto, que na verdade é um form novo, vazio, apenas com o ACBrMail.

Nem salvei, diga-se de passagem:

  1. Abri um novo projeto (Project -> New Project -> OK)
  2. Inseri o ACBrMail no meio do form
  3. Fechei o Lazarus, ele perguntou "Save changes to project project1?"
  4. Cliquei no botão "No" e ficou travado por uns 30 segundos.

 

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

  • Este tópico foi criado há 3200 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.