Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Desenvolvi uma aplicação utilizando Threads, para emissão de NFe e, me deparei com um problema ao envio de emails, se por algum motivo o sistema gerar um erro, ele exibe uma caixa de dialogo na tela. Então, criei uma propriedade dentro do ACBrMail para que o Desenvolvedor escolha a forma que deseja trabalhar, se o sistema exibe ou não a mensagem de erro(se escolher não, o sistema manterá a mensagem do Excetion em uma variável, permitindo o uso dela posteriormente). Segue o código para ser analisado e, se possível, acrescido aos fontes do Projeto ACBr.

ACBrMail.pas

  • 2 semanas depois ...
Postado

Bom andei fazendo testes aki e mesmo marcando a opcao UseThread = True, no componente, ao executar (debugando) notei que a propriedade UseThreadNow esta false, ou seja, nao esta respeitando a marcacao no componente..

Truck2

Atualizei hoje

 

alguma sugestão?

 

  • Moderadores
Postado
Em 18/12/2015 at 21:27, Paulo Augusto disse:

Bom andei fazendo testes aki e mesmo marcando a opcao UseThread = True, no componente, ao executar (debugando) notei que a propriedade UseThreadNow esta false, ou seja, nao esta respeitando a marcacao no componente..

Truck2

Atualizei hoje

 

alguma sugestão?

 

Sim tenta aplicar a correção que achar necessário e depois testar! se funcionar repassa aqui que havailiamos

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

  • Fundadores
Postado

Para informar Bugs, por favor forneça um passo a passo de como reproduzi-lo nos Demos do ACBr

Notei que na sua sugestão de implementação, os métodos "GetMensagemErro" e "SetMensagemErro", estão órfãos...

 

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.

  • 1 mês depois ...
Postado

Boa noite

Gostaria de saber se teria como adicionarem a opção de sim ou não para exibir mensagem de erro abaixo ao tentar enviar o e-mail:

- SmtpError('SMTP Error: Unable to send MailTo.');
-SmtpError('SMTP Error: Unable to send MailFrom.');
 

Obrigado.

Postado

Boa noite,

Oque eu quero e se houver algum e-mail invalido (não existir no provedor ) não dar a mensagem para continuar com os outros e-mail , e enviar normal para os restantes !!!

O código que eu comentei e funcionou foi este :

  // Sending MailTo //
  MailProcess(pmsSendTo);

  for i := 0 to fMIMEMess.Header.ToList.Count - 1 do
  begin
    for vAttempts := 1 to fAttempts do
    begin
      if fSMTP.MailTo(GetEmailAddr(fMIMEMess.Header.ToList.Strings))then
        Break;

      if vAttempts >= fAttempts then   /////////////////////////////////////////SE EU COMENTAR AQUI E ABAIXO NAO DA MSG E ENVIA O E-MAIL 
        SmtpError('SMTP Error: Unable to send MailTo.');
    end;
  end;

Postado

Bom dia , Daniel

Vou tentar explicar melhor.

Estou enviando e-mails da NF-e , e para adicionar os e-mails dos destinatários adiciono assim : ACBrMail1.AddAddress(lbxEmail.Items, '');
Nesta lista eu tenho uma função para verificar se o e-mail é valido (se tem @ e etc ), mas nesta função não valida se o e-mail digitado existe de verdade por exemplo:
[email protected]  (vamos dizer que por falta de atenção digitou errado) , so que nesta lista existe 3 e-mails sendo 2 valido 1 errado inexistente.

Quando disparo envio vai dar esta msg : SmtpError('SMTP Error: Unable to send MailTo.');
Eu queria ver se tem como o componente ignorar este e-mail invalido e enviar para os outros o e-mail normal

Não sei se foi claro não minha explicação.

Obrigado, pela atenção.

Postado

Bom dia , Juliomar

Sim concordo com você , mas que estou dizendo querendo seria : ignorar o e-mail invalido e continuar enviando e-mail para o restante do destinatário, por isso que queria ver a possibilidade de colocarem um opção no componente para habilitar este processo ou não .
 

Obrigado

  • Consultores
Postado

Eu entendi o que quer dizer. Você entendeu que não podemos simplesmente comentar ou remover a linha?

Em caso positivo, por favor, anexe o arquivo alterado com a proposição dessa nova funcionalidade para que possa ser analisado.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado (editado)

corrijam-me se estiver errado, contudo creio que todo o processo de validação a esse nivel (email correto, mas nao existe) é efetuado no servidor de email, sendo que se estamos a falar de email em lote (com mais de 1 destinatario) não tem como controlar qual dos emails é incorreto, contudo o email é enviado para os restantes que estiverem corretos.

Onde quero chegar é que se está a enviar emails em lote o erro que retorna serve para avisar que 1 ou mais email estao errados. se queres controlar a emissao a esse nivel granular basta criares o loop para cada email que envias e controlares o retorno de erros um a um. isso compete a aplicação e nao ao componente fazer.

 

Editado por 3Soft Sistemas
Postado

Boa tarde, muito bom expor sua opinião , mas não vejo a todo vapor desta forma .Na minha aplicação eu faço a tal validação .
Acredito que não tem sentido: exemplo envio de uma NF-e :
eu fazer um loop nos destinatários , se o componente pode enviar de uma única vez para todos .
E outro exemplo se estou criando uma mala direta com 1000 e-mail fazer este loop seria ... invalido na minha opinião claro.

So para efeito de conhecimento
neste link tem um classe , que acessa um WS para validar o e-mail no provedor :
http://www.activedelphi.com.br/forum/viewtopic.php?t=84162&sid=efbe3005507e0303c6b41b0cc508076b

Obrigado

Postado (editado)

seja qual for o sistema que uses para validar o email ele tem sempre de ser efetuado 1 a 1  dentro de um loop. Mais uma vez isso compete a politica de desenvolvimento da aplicação e não ao componente. o componente deve funcionar bem seja para enviar emails em lote ou individual, e isso ele faz.

pessoalmente não vejo vantagem em que o componente faça isso pois o tempo de processo para enviar 1000 email em lote é substancialmente menor que enviar 1 a 1, algo que nao vejo vantagem, mesmo que depois tenha maior controle no retorno de erros. Creio que compete á aplicação e, por acrescimo aos utilizadores da aplicação, validar os email que usam.

uma  opçao melhor para isso seria colocares um botao de validação do email nos cadastros onde ele possa existir, passando assim a responsabilidade dessa operação para o utilizador

Editado por 3Soft Sistemas
  • Fundadores
Postado

Humm... penso que já temos a solução... use o evento: "OnMailException"... observe que se você informar "TrowIt := False", a exceção não será lançada...

procedure TForm1.ACBrMail1MailException(const AMail: TACBrMail;
  const E: Exception; var ThrowIt: Boolean);
begin
  ShowMessage(E.Message);
  ThrowIt := False;
  mLog.Lines.Add('*** Erro ao Enviar o email: '+ AMail.Subject);
end;   

 

  • 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

Daniel, tanto deixando esta variável como false ou true a mensagem chega do mesmo jeito.
A propriedade do componente UseThread também setando ela direto designer ou execução ela sempre fica como false.

Então eu forcei a variável(fUseThread) para true no código , a mensagem não aparece, porem o e-mail não continua o seu envio para o destinatário que esta correto.
Obrigado

  try
    fGetLastSmtpError := pMsgError;
    MailProcess(pmsError);

   fUseThread:= true;

   if not fUseThread then
     DoException( Exception.Create(pMsgError) );
  finally
    Clear;
  end;

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