Ir para conteúdo
  • Cadastre-se

dev botao

Novo Componente Acbrmail


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

Recommended Posts

Acho que talvez resolva desmarcar todas as opções dos grupos "Runtime errors" e "Debugging", e depois recompilar. Mas, como citei na mensagem anterior, fiz algo parecido no Lazarus e o Norton não incomodou mais. Também, já ví este problema acontecer só com o Norton.

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

  • Consultores

Só um alerta: As opções do grupo "Runtime errors" não são de debug. Desabilitá-los podem causar efeitos indesejados caso não entenda exatamente o que está fazendo.

 

O alerta do vírus é um falso positivo. Tem muita informação sobre isso na web. Nessa pergunta do StackOverflow você vai encontrar vários links explicando o motivo e algumas das coisas que você pode fazer.

[]'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.
Link para o comentário
Compartilhar em outros sites

Não há dúvida de que seja um falso positivo. Quanto ao grupo "Runtime errors", de fato, me equivoquei :oops: (uso muito raramente o Delphi e só para testes).

 

Uso com frequência o serviço http://www.virustotal.com/ . Certa vez, um executável compilado no Lazarus acusava vírus em três antivírus no vírustotal. Depois de muita batalha, por incrível que pareça, quando renomeei um formulário de fPrincipal para frmPrincipal os falsos positivos pararam. Para ter certeza, criei dois executáveis alterando apenas o nome do formulário. E o fato ficou comprovado.

 

Agora, no post no StackOverflow diz que o serviço http://virusscan.jotti.org/ é melhor.

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

Bom dia Jean.

 

Primeiramente parabéns pelo trabalho.

 

Estou tendo problemas com a utilização do charset ISO8859-1. Foi preciso fazer uma mudança no método "Send". Estou anexando o arquivo unit alterado, e detalhando abaixo:

  // DONE -oJacinto Junior: Ajustar para somente converter se o charset for diferente de ISO8859-1.
//  if fDefaultCharsetCode <> UTF_8 then
  if fDefaultCharsetCode <> ISO_8859_1 then
    fBody.Text := CharsetConversion(fBody.Text, UTF_8, fDefaultCharsetCode);

  // DONE -oJacinto Junior: Ajustar para somente converter se o charset for diferente de ISO8859-1.
//  if fDefaultCharsetCode <> UTF_8 then
  if fDefaultCharsetCode <> ISO_8859_1 then
    fAltBody.Text := CharsetConversion(fAltBody.Text, UTF_8, fDefaultCharsetCode);

ACBrMail.pas

Link para o comentário
Compartilhar em outros sites

Com esta alteração que você indicou, os textos com acento ficam assim:

Se você consegue ler esta mensagem, significa que suas configurações
de SMTP estão corretas.
 

Estou usando Windows 8.1, Thunderbird e Hotmail.

Como você fez o teste?

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

Não é necessário alterar o código. Sugestões:

 

Você pode testar algumas opções da propriedade DefaultCharset do componente. Ou configurar seu aplicativo de e-mail para autodetectar a codificação das mensagens.

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

O componente ACBrMail foi testado no FPC 2.6.2, FPC 2.7.1 e no Delphi 7.

 

Para compilar o exemplo "Enviador de e-mails ACBrMail" (não é o componente) com FPC 2.7.1, na unit ucontatoslist.pas, alterar a linha 102 de:

DBGrid1.DataSource.Dataset.Bookmark := TBookmarkStr(Items[x]);

Para:

DBGrid1.DataSource.Dataset.Bookmark := Items[x];

Para quem quiser testar, segue anexo o exemplo compilado (compilação atualizada em 03/11/2013).

Env_ACBrMail.zip

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

Jean, através do componente, existe a possibilidade de salvar a mensagem enviada?

 

Um recurso de salvamento similar ao encontrado no Thunderbird, Win Mail, etc., que salva a extrutura MIME da mensagem, não tem. Mas, como sugestão, você pode salvar as configurações da mensagem (assunto, conteúdo, listas de destinatários e anexos) em um arquivo ou em um banco de dados.

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

Obrigado pelas resposta Jean. Estou migrando para o ACBrMail as funcionalidades que enviam mensagens de email e por este motivo tenho postado está série de mensagens.

 

Jean por qual motivo a conversão de charset do assunto é feita considerando a seguinte condição "fDefaultCharsetCode <> ISO_8859_1" e a conversáo de charset do corpo da mensagem é feita considerando "fDefaultCharsetCode <> UTF_8˜?

Link para o comentário
Compartilhar em outros sites

Devido a outra mensagem sua postada aqui, ontem estava revisando o código e, de fato, notei esta diferença. Amanhã deve estar disponível uma correção no svn. Do modo como está agora, um assunto que contenha acentos não é mostrado corretamente no Windows Mail e nem na página do Hotmail (no site do Gmail e o Thunderbird é mostrado corretamente). Em meus testes, com a correção, o texto do assunto e do corpo da mensagem, ambos contendo acentos, foram mostrados corretamente em todos os leitores de e-mail citados acima.

  • Curtir 1
Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

Jean, outra parte onde precisei fazer adaptação foi a seguinte:

  if Trim(fFromName) <> '' then
    // DONE -oJacinto Junior: Ajustar para não acrescentar as aspas duplas.
//    fMIMEMess.Header.From := '"' + fFromName + ' <' + From + '>"'
    fMIMEMess.Header.From := fFromName + ' <' + From + '>'
  else
    fMIMEMess.Header.From := fFrom;

Em anexo segue o arquivo.

 

Referente ao charset, tive que manter as condições utilizando o ISO8859-1. Peço que se mais alguém teve problemas com acentuação, que os relate aqui.

ACBrMail.pas

Link para o comentário
Compartilhar em outros sites

primeira cuidado ao enviar email é; não colocar link dentro do corpo do email...

e tentar não repetir o mesmo conteúdo no assunto e na mensagem do email. Dessa forma o servidor de email não vai ver sua mensagem como spam.

 

Att. Solivan

Editado por Solivan

Sistema de Automação Comercial para diversos segmentos
NF-e, NFC-e, SPED Fiscal - www.arenasoft.com.br

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Membros Pro

Bom dia, estou migrando minhas rotinas de e-mail para o novo componente, fiz vários testes hotmail,gmail,etc.., todos ok, estou apenas com um probleminha que não estou conseguindo resolver, fui testar o retorno com um email invalido e retorna SMTP Error: Unable to send MailTo. que esta no trecho de código :

....

for i := 0 to fMIMEMess.Header.ToList.Count - 1 do
    for vAttempts := 1 to fAttempts do
    begin
      if fSMTP.MailTo(GetEmailAddr(fMIMEMess.Header.ToList.Strings))then
        Break;
      if vAttempts >= fAttempts then
        raise Exception.Create('SMTP Error: Unable to send MailTo.');
    end;

....

 

O problema que uma vez que deu erro, mesmo inserindo email corredo sempre entra na mesma restrição, como se ainda estivesse em memória o email anterior, ai fecho a aplicação e abro novamente tudo ok.

 

Como faço para limpar o componente antes de tentar novamente ?

 

Meu codigo :

procedure EnviarEmail(EmailEmitente, NomeEmitente, Host, UserName, Password, Assunto, EmailCliente :String;
                      Mensagem,Anexos: TStringList;
                      Porta          : Integer;
                      HTML, SSL, TSL : Boolean);
var x:Integer;
    vEmails:TStringList;
begin 
  try
    vEmails                        := TStringList.Create;
    vEmails.Text                   := StringReplace(EmailCliente,';',chr(13)+chr(10),[rfReplaceAll]);
    
    frmPrincipal.ACBRmail.From     := EmailEmitente;            //-- Email do emitente.
    frmPrincipal.ACBRmail.FromName := NomeEmitente;             //-- Nome do emitente.
    frmPrincipal.ACBRmail.Host     := Host;                     //-- Servidor SMTP.
    frmPrincipal.ACBRmail.Username := UserName;                 //-- Nome de usuário.
    frmPrincipal.ACBRmail.Password := Password;                 //-- Senha do usuário.
    frmPrincipal.ACBRmail.Subject  := UTF8Encode(Assunto);      //-- Assunto.
    frmPrincipal.ACBRmail.Body.Text:= UTF8Encode(Mensagem.Text);//-- Corpo da mensagem.
    frmPrincipal.ACBRmail.Port     := IntToStr(Porta);          //-- Porta do servidor SMTP.
    frmPrincipal.ACBRmail.IsHTML   := HTML;                     //-- Define se a mensagem é em HTML.
    frmPrincipal.ACBRmail.SetSSL   := SSL;                      //-- Define SSL.
    frmPrincipal.ACBRmail.SetTLS   := TSL;                      //-- Define TLS.
 
    for x:= 0 to vEmails.Count - 1 do
    begin
       frmPrincipal.ACBRmail.AddAddress(vEmails.Strings[x], '');//-- Adiciona os emails que serão enviados.
    end;
 
    for x:= 0 to Anexos.Count - 1 do
    begin
      frmPrincipal.ACBRmail.AddAttachment(Anexos.Strings[x], '');//-- Adiciona os anexos.
    end;                                                         
 
    frmPrincipal.Thread.Execute(0); // o send está na Thread , mas tb testei sem a Tread e ainda sim sempre volta no erro
  Finally
    FreeAndNil(vEmails);    
  end;
Editado por netstart

Jorge – Analise / Desenvolvimento de Sistemas

Netstart Informatica - (18)3642-0900

www.netstart.com.br

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Resolvi o meu problema citado logo acima alterando a procedure clear localizada no AcbrMail para public, permitindo assim fazer a chamada antes de alimentar novamente o componente, claro que talvez não seja o ideal, para min min resolveu...

Jorge – Analise / Desenvolvimento de Sistemas

Netstart Informatica - (18)3642-0900

www.netstart.com.br

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Boa tarde pessoal, estou migrando para o ACBRmail e já fiz inúmeros testes mas todos os Emails que eu envio estão chegando no destinatário Sem Assunto, alguém passou por isso ou viu algo semelhante que possa me ajudar?

 

Verifique se a propriedade Subject está sendo preenchida. Exemplo:

ACBrMail1.Subject := 'Seu Assunto';
Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
 
Jean, acho que achei o problema, eu define o DefautCharset como UTF_8 no componente e quando chamo o send do componente ele esta verificando se o DefautCharset é diferente de UTF_8 pra converter, como não é diferente não esta atribuindo o assunto, abaixo está o trecho de código que eu copiei do procedimento Send do Componente.
if fDefaultCharsetCode <> UTF_8 then
    fMIMEMess.Header.Subject := CharsetConversion(fSubject, UTF_8, fDefaultCharsetCode);
Modifiquei esse trecho e Funcionou Mesmo com o CharsteDefaut = UTF_8 assim:
 
if fDefaultCharsetCode <> UTF_8 then
    fMIMEMess.Header.Subject := CharsetConversion(fSubject, UTF_8, fDefaultCharsetCode)
else
    fMIMEMess.Header.Subject := fSubject;

Tem algum motivo pra manter o Componente com o DafaultCharset diferente de UTF_8?

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Bom dia, estou migrando minhas rotinas de e-mail para o novo componente, fiz vários testes hotmail,gmail,etc.., todos ok, estou apenas com um probleminha que não estou conseguindo resolver, fui testar o retorno com um email invalido e retorna SMTP Error: Unable to send MailTo.

...

 

O problema que uma vez que deu erro, mesmo inserindo email corredo sempre entra na mesma restrição, como se ainda estivesse em memória o email anterior, ai fecho a aplicação e abro novamente tudo ok.

 

Como faço para limpar o componente antes de tentar novamente ?

 

Resolvi o meu problema citado logo acima alterando a procedure clear localizada no AcbrMail para public, permitindo assim fazer a chamada antes de alimentar novamente o componente, claro que talvez não seja o ideal, para min min resolveu ...

 

Boa tarde pessoal, estou migrando para o ACBRmail e já fiz inúmeros testes mas todos os Emails que eu envio estão chegando no destinatário Sem Assunto, alguém passou por isso ou viu algo semelhante que possa me ajudar?

 

Jean, acho que achei o problema, eu define o DefautCharset como UTF_8 no componente e quando chamo o send do componente ele esta verificando se o DefautCharset é diferente de UTF_8 pra converter, como não é diferente não esta atribuindo o assunto ...

 

Já está disponível no SVN correções para as situações citadas acima. Para mais detalhes, vejam o arquivo "ACBrTCP-change-log.txt".

 

Obrigado netstart e plenus.

Consultor SAC ACBr Jean Patrick Figueiredo dos Santos
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

                    DJPDV - Um frente de caixa SIMPLES e COMPLETO

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3513 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.