Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Olá, estou trabalhando normalmente com os componentes para envio da NFe.

Meus clientes solicitaram o recurso de enviar a NFe por e-mail.

Ví no DEMO, a utilização do método EnviarEmail

Pareceu bem tranquilo de utilizar.

Fiz todas as implementações e testes na minha máquina, e não tive nenhum problema.

O problema, é que nos dois clientes que tentei utilizar, o sistema não da nenhum erro. Porém, o e-mail simplesmente não chega ao destinatário, e nem aos copiados.

Alguem faz ideia do que pode estar acontecendo?

Postado

pegue os dados do cliente em questão (host, username, senha, etc) e debugue na sua máquina. O enviar email tem um detalhe: não passe nil como parâmetro para TStrings CC, CCO, etc. Crie um objeto e passe ele vazio.

Postado

Então, cara, o mais estranho é q fiz o debug conectado diretamente no banco de dados do cliente.

Pela minha máquina funciona normal.

A única diferença é o SO das maquinas.

No meu Note é Win Vista. E nos clientes em todos os casos é Win XP.

Será que é necessário ter alguma DLL na máquina?

valew

Postado

E ae... eu salvo os xmls no banco de dados (firebird), tem como criar uma rotina para carregar o xml a partir do banco de dados e mandar por e-mail ?

obrigado,

Postado

Consegui resolver meu problema, talvez possa te ajudar, mas se alguém tibver uma ideia melhor seria bom, pois do meu jeito é meio 'gambiarra':

procedure Tf_LVendas.EnviarXMLporeMail;

var

sXML: TStringStream;

anexo : TFileName;

i: integer;

begin

//localiza no cadastro de cliente o mesmo e verifica se tem e-mail senao ele para o envio

dm.cdsCliente.Locate('IDCLIENTE',DBEdit3.Text,[]);

if dm.cdsClienteEMAIL.AsString = '' then

begin

ShowMessage('vá até o cadastro do cliente e verifique se o mesmo tem um e-mail cadastrado');

DeleteFile(ACBrNFe.NotasFiscais.Items[0].NomeArq);

Exit;

end;

ProgressBar1.Visible:= true;

for i := 0 to 300 do

ProgressBar1.Position:= 300;

// para carregar o xml a partir da base de dados

sXML := TStringStream.Create(dm.cdsNFe.FieldByName('XMLNFELETRONICA').Value);

ACBrNFe.NotasFiscais.Clear;

ACBrNFe.NotasFiscais.LoadFromStream(sXML);

ACBrNFe.NotasFiscais.SaveToFile('C:\NFe\xmlTempMail\');

// ShowMessage('O arquivo foi Salvo no caminho:C:\NFe\xmlTempMail\');

try

dmAux.EmailCorpo.From.Name := 'xxxxx';

dmAux.EmailCorpo.From.Address := 'xxx';

dmAux.EmailCorpo.Recipients.EMailAddresses := dm.cdsClienteEMAIL.AsString;

dmAux.EmailCorpo.Priority := mpHighest;

dmAux.EmailCorpo.Subject := 'Arquivo xml da NF ' + IntToStr(dm.CDS_VENDA_CABNUMERONF.AsInteger);

dmAux.SMTP1.Host := 'smtps.uol.com.br';

dmAux.SMTP1.Username := 'xxxxxxxxxxx';

dmAux.SMTP1.Password := 'xxxxxxxxxxxx';

dmAux.SMTP1.AuthType := satDefault;

dmAux.SMTP1.Port := 587;

dmAux.EmailCorpo.Body.Clear;

dmAux.EmailCorpo.Body.Add('Segue em anexo o arquivo xml ref a NF-e ' + IntToStr(dm.CDS_VENDA_CABNUMERONF.AsInteger));

anexo:= (ACBrNFe.NotasFiscais.Items[0].NomeArq);

TIdAttachmentFile.Create(dmAux.EmailCorpo.MessageParts, TFileName(Anexo));

dmAux.SMTP1.Connect;

dmAux.SMTP1.Send(dmAux.EmailCorpo);

dmAux.SMTP1.Disconnect;

DeleteFile(ACBrNFe.NotasFiscais.Items[0].NomeArq);

except

on e: Exception do

begin

ShowMessage('E-mail não enviado');

exit;

end;

end;

for i := 0 to 1000 do

ProgressBar1.Position:= 1000;

ShowMessage('E-mail enviado com sucesso');

ProgressBar1.Visible:= false;

  • Moderadores
Postado

Olá...

Não considero isso gambiarra.... pois vc salva o XML temporariamente e anexa no INDY. Depois apaga ele. Eu inclusive faço isso tb.

Se tivesse como anexar um FileStream no INDY seria o ideal... mas eu pelo menos nao conheço essa função.

Oq eu vejo é que vc carrega o XML para o componente antes de salvar o mesmo em disco. Esse passo poderia ser pulado pois bastaria vc salvar direto do banco no disco.

Se vc quiser usar o processo de envio de email do componente, ae sim basta carregar o XML no componente e depois usar a rotina de envio de email do mesmo.

[]´s

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Postado

vlw pela dica juaumkiko, realmente se pudesse anexar o FileStream direno no indy seria fantástico, eu achei que eu que nao estava conseguindo, perdi um tempao tentando, dai tive a ideia de fazer desse jeito, é bom saber que não é 'gambiarra' já que sou novo na area e as vezes faço umas coisas estranhas... eu nao havia entendido muito bem o uso do envio do componente, mas com mais calma vou olhar o demo e analisar melhor pra entender...

  • 3 semanas depois ...
  • Este tópico foi criado há 4896 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.