Ir para conteúdo
  • Cadastre-se

dev botao

ACBrMail - SMTP Error: Unable to Login


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

Recommended Posts

Bom dia a todos.

Verifiquei em todos os posts sobre esse problema e de fato não consegui uma solução para situação que ocorre no meu caso.
Tenho um cliente que utiliza a configuração de email usando um servidor de SMTP local, ficando o SMPT com um endereço IP local.

Fiz todos os testes utilizando o demo ACBrNFSe.

Investigando o problema (com os fontes do ACBr atualizados), cheguei nas seguintes conclusões:

=> unit smtpsend 
-> function TSMTPSend.Login: Boolean

- seta a var "FAuthDone":
"if" que inicia na linha 450 até a linha 465
. tenta com FindCap('AUTH ') e FindCap('AUTH=')
. no entanto, dentro da função "FindCap", a lista FESMTPcap não contem os termos AUTH ou AUTH= (conforme fig. em anexo), retornando sempre '' e ficando a var "FAuthDone" com valor "False" não validando o login de acordo com o código mostrado abaixo (que faz a chamada para função "Login")

=> unit ACBrMail
-> procedure TACBrMail.SendMail

- faz a validação do login - "for" que inicia na linha 690:

  for vAttempts := 1 to fAttempts do
  begin
    if fSMTP.Login and fSMTP.AuthDone then
      Break;

    if vAttempts >= fAttempts then
      SmtpError('SMTP Error: Unable to Login.');
  end;

. a var "fSMTP.AuthDone" acaba ficando sempre com "false" (de acordo com o mostrado acima), invalidando o login e retornando sempre 'SMTP Error: Unable to Login.'
. OBS.: se comentar a verificação "fSMTP.AuthDone" deixando apenas "if fSMTP.Login then ..." ai o email é enviado normalmente (tanto com como sem a conexão TLS).

Enfim, acredito que esteja faltando tratar alguma situação na carga da lista FESMTPCap nesses casos de configuração de email utilizando um servidor de SMTP local por IP; por favor, alguém poderia me ajudar nessa questão para entender e realizar esse ajuste?

Aguardo um retorno, obrigado.
André Luis.

post_ACBrMail.jpg

Link para o comentário
Compartilhar em outros sites

15 minutos atrás, Juliomar Marchetti disse:

Bom dia

esse erro é por causa da ssleay32 e libeay32 diferentes da que deve se usar.

Bom dia Juliomar.

Estou utilizando essas dlls copiadas da pasta "C:\ACBr\DLLs\OpenSSL\0.9.8.14".

Copiei elas apenas para pasta Windows\System32.

Seria isso, está correto?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Se o seu Windows for 64 bits, você deveria copia-las para SysWow64... mas o melhor é deixar todas as DLLs na mesma pasta da sua aplicação (.EXE)

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.

Link para o comentário
Compartilhar em outros sites

36 minutos atrás, Daniel Simoes disse:

Se o seu Windows for 64 bits, você deveria copia-las para SysWow64... mas o melhor é deixar todas as DLLs na mesma pasta da sua aplicação (.EXE)

Boa tarde Daniel.

O Windows em que estou testando e 32; no entanto apaguei todas as dlls da pasta system32 e coloquei todas na pasta da aplicação; fiz logoff na máquina e testei novamente... o erro continua.

Lembrando, conforme o primeiro post, que olhando a stringlist FESMTPCap não consta o item AUTH ou AUTH= que são procurados para validação da variável fSMTP.AuthDone (debuguei tanto com como sem conexão TLS).

Outro detalhe, tenho uma versão antiga compilada na última atualização do Trunk1 e ela funciona - se testo na compilação atual não funciona, se rodo (em seguida sem alterar nenhuma config.) na compilação antiga, envia normalmente.

Vcs já chegaram a realizar algum teste usando um servidor SMTP local via IP na versão nova com Trunk2?

Obrigado desde já pela atenção.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

De acordo com o código da Synapse, se não encontrar o "AUTH" , na lista de capacidades do Servidor, ele não fará login....

      s := FindCap('AUTH ');
      if s = '' then
        s := FindCap('AUTH=');
      auths := UpperCase(s);
      if s <> '' then
      begin
        if (Pos('PLAIN', auths) > 0) then
          FAuthDone := AuthPlain;
        if (not FauthDone) and (Pos('LOGIN', auths) > 0) then
          FAuthDone := AuthLogin;
        if (not FauthDone) and (Pos('CRAM-MD5', auths) > 0) then
          FAuthDone := AuthCram;
      end;     

Aparentemente é algum erro na configuração do seu servidor SMTP...

Tente o seguinte ajuste, em smtpsend.pas,  definindo um valor padrão "AUTH PLAIN", se nenhuma informação de autenticação seja enviada pelo servidor...

      s := FindCap('AUTH ');
      if s = '' then
        s := FindCap('AUTH=');
      if s = ''  then
        s := 'AUTH PLAIN';

 

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

Link para o comentário
Compartilhar em outros sites

Bom dia Daniel.

Infelizmente ainda não deu certo, fiz o ajuste que vc orientou e também tentei com os seguintes tipos de autorização (mas tb não funcionaram):

s := 'AUTH LOGIN';

(e)

s := 'AUTH CRAM-MD5';

Em todos os casos o "ReadResult" de FSock.SendString é "504" ; e a comparação feita é: Result := ReadResult = 235;

Fiz testes com TLS, SSL ...

Vc mencionou a possibilidade de ser alguma configuração incorreta no SMTP, a minha dificuldade é que o meu cliente (que é uma unidade da USP) tem um dpto de TI e não tenho acesso a essas configurações, e eles dizem que está correto (mas posso tentar insistir com eles). O estranho é que na versão compilada antes da migração para Trunk2 não da erro, isso é alguma verificação de autorização de login que antes não era realizada? Pois se eu comentar o "fSMTP.AuthDone" o email é enviado normalmente.

Obrigado pela atenção.

André Luis.

Link para o comentário
Compartilhar em outros sites

6 minutos atrás, Daniel Simoes disse:

O Servidor é aberto ?  não requer uma autenticação e login ?

Daniel, acabei de levantar essas informações, segundo meu cliente:

"nosso servidor de smtp esta configurado para não pedir autenticação para rede interna nossa"

aí questionei se configurar uma autenticação nele iria dar problemas para os usuários na rede, veja reposta:

"Sim. Esse servidor nós usamos para enviar e-mails em lote e scaneamentos. As impressoras da canon não aceitam autenticação, por isso tivemos que deixar assim."

Enfim, teríamos que ter a possibilidade de parametrizar o envio de email sem autenticação, será que isso é possível?

Lembrando que se eu omitir a verificação da autenticação, o email acaba sendo enviado normalmente...

Desculpe o incomodo, mas acabou caindo numa situação nova... de qq forma, obrigado desde já por toda atenção.

André Luis.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

No SVN...

Citar

-- ACBrMail --
[*] Remoção da verificação de autenticação, após o Login no SMTP
    (alguns servidores não requerem login)
    (por: DSA)  

 

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

Link para o comentário
Compartilhar em outros sites

34 minutos atrás, Eremar Mates disse:

boa tarde, estou com o mesmo problema em um cliente meu, o que vc fez que resolveu o problema

Boa tarde, faz o que o juliomar disse sobre as dlls, caso nao resolva verifique se o servidor do email necessita de autenticação, no caso do gmail tive que liberar umas coisas nas configurações do gmail..

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Bom dia. Estou com o mesmo problema após ter atualizado o SVN

Tentei com as ssleay32 e libeay32 existentes nas pastas:

MinGW32

OpenSSL

E outras que identifiquei com alteração de tamanho.

Coloquei-as na pasta de meu executável, como já ocorria.

Com a versão anterior vai, sem problemas.

Testei com GMAIL, HOTMAIL e Locaweb.

O exemplo da ACBr também não vai.

Temos alguma possibilidade de testes ou procedimento que eu deva fazer?

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Este erro é único e exclusivo por ter arquivos de versões diferente do openssl.

remova todos de seu micro e use somente o que está no svn do acbr.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Boa tarde Juliomar.

Testei com as dlls contidas nas seguintes pastas do SVN:

\Acbr\ACBrFramework\Dll\x64

\Acbr\ACBrFramework\Dll\x86

\Acbr\branches\DLLs\Win32\OpenSSL

\Acbr\branches\DLLs\Win64\OpenSSL

\Acbr\tags\ACBrTrunk2015\DLLs\OpenSSL

\Acbr\tags\ACBrTrunk2015\DLLs\OpenSSL\0.9.8.1

\Acbr\trunk2\DLLs\OpenSSL\0.9.8.1

\Acbr\trunk2\DLLs\OpenSSL\0.9.8.14

\Acbr\trunk2\DLLs\XMLSec\MinGW\32

\Acbr\trunk2\DLLs\XMLSec\MinGW\64

\Acbr\trunk2\Lib\Delphi\LibD7

\Acbr\trunk2\Lib\Delphi\LibD7\MinGW\32

\Acbr\trunk2\Lib\Delphi\LibD7\MinGW\64

Em todas essas pastas existiam a ssleay32 e libeay32 e foram testadas em par, ou seja, sempre colocando as duas DLLs da mesma pasta.

Antes dos testes eu apaguei as mesmas da pasta do system e do delphi. 

Elas foram colocadas na pasta da minha aplicação(.exe).

Mesmo retorno para todas as versões da DLL.

Na versão anterior do ACBr ainda vai com as configurações que estão, testadas no Hotmail, Gmail e Locaweb.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Não há nada de errado nos fontes... vários aqui usam os provedores citados...

Verifique se você liberou no provedor, o acesso por SMTP...

Acabei de lhe enviar um email de testes, pela LocaWeb


  ACBrMail1.From := '[email protected]';
  ACBrMail1.FromName := 'ACBr Teste';
  ACBrMail1.Host := 'smtp.email-ssl.com.br'; // troque pelo seu servidor smtp
  ACBrMail1.Username := '[email protected]';
  ACBrMail1.Password := 'sua_senha';
  ACBrMail1.Port := '465'; // troque pela porta do seu servidor smtp
  ACBrMail1.SetTLS := True;  // Verifique se o seu servidor necessita SSL

 

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.

Link para o comentário
Compartilhar em outros sites

O motivo eu não entendi.

Tenho ainda um aplicativo compilado na versão anterior, ele ainda está rodando e ainda está enviando e-mails. Ele esta configurado para a porta 587 na Locaweb.

Se eu atualizar, este aplicativo para de enviar os e-mails.

Trocando a porta para 465, como você fez, ele volta a funcionar. Não precisei mexer na dll mesmo, mas a porta 587 não conseguiu enviar o e-mail na versão nova.

Grato pelo seu exemplo.

Ainda não testei no Gmail e no Hotmail novamente, mas se o e-mail voltou a ir, agora eu troco as portas na atualização para testar.

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...
  • Moderadores

Bom dia

sabe qual o erro?

é que você deve mesmo não usando o SSL setar ele pra false!

ACBrMail1.SetTLS := true;

ACBrMail1.SetSSL := false;

ACBrMail1.Port := '587';

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • 4 meses depois ...
Em 15/09/2017 at 17:59, Daniel Simoes disse:

Não há nada de errado nos fontes... vários aqui usam os provedores citados...

Verifique se você liberou no provedor, o acesso por SMTP...

Acabei de lhe enviar um email de testes, pela LocaWeb



  ACBrMail1.From := '[email protected]';
  ACBrMail1.FromName := 'ACBr Teste';
  ACBrMail1.Host := 'smtp.email-ssl.com.br'; // troque pelo seu servidor smtp
  ACBrMail1.Username := '[email protected]';
  ACBrMail1.Password := 'sua_senha';
  ACBrMail1.Port := '465'; // troque pela porta do seu servidor smtp
  ACBrMail1.SetTLS := True;  // Verifique se o seu servidor necessita SSL

 

Daniel, até Dezembro/17  eu utilizava os fontes antes desta alteração sem problemas com o Gmail/Hotmail, depois que atualizei notei que em "procedure TACBrMail.SendMail;" a linha

if fSMTP.Login and fSMTP.AuthDone then

foi alterada para 

if fSMTP.Login then

Em outros smtps, estes com hospedagem cPanel, funciona normal, só que com gmail ou hotmail não vai...

Eu fiz um teste alterando e compilando com a linha abaixo 

if fSMTP.Login and fSMTP.AuthDone then

E o envio voltou a funcionar normalmente, veja aí se faz sentido o que relatei.

Obrigado

Jaisson

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2231 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.

The popup will be closed in 10 segundos...