Anexo de e-mail Incorreto
Boa Tarde,
Em minha aplicação estou utilizando um recurso de enviar um e-mail contendo varios anexos, só que os anexos estão sendo enviados como um arquivo .DAT.
* O Tipo de Arquivo que estou tentando enviar é .XML, Mas já tentei com outras extenções e tambem não funcionou.
Resumindo o e-mail chega mais o anexo vai errado.
Estou utilizando a seguinte codificação:
NO BOTÃO DO FORM PASSANDO PARAMETROS DE CONEXÃO
procedure TfrmGerarArquivos.btnEnviarArquivosClick(Sender: TObject);
var
xLFuncoes:TFuncoes;
xLUsuario : string;
xLSenha : string;
xLHost : string;
xLPorta : string;
xLtitulo : string;
xLRemetente : string;
xLDestinatario : string;
xLTextoCorpo : string;
xLArqAnexos : string;
begin
xLFuncoes:=TFuncoes.Create;
xLArqAnexos:= 'BSK02.xml'; +
'BSK02.xml;' +
'BSK03.xml;' +
'BSK04.xml;' +
'BSK05.xml;' +
'BSK06.xml;' +
'BSK08.xml;' +
'BSK09.xml;' +
'BSK10.xml;' +
'BSK11.xml;' +
'BSK12.xml;' +
'BSK13.xml;' +
'BSK85.xml';
DMClientPrincipal.cdsK13EMLCFG.Active:=True;
xLUsuario := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlUse') .Value;
xLSenha := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlKey') .Value;
xLHost := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlHost').Value;
xLPorta := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlPort').Value;
xLtitulo := 'Envio de Sync Atualizado - '+ DateToStr(Now);
xLRemetente := UDMClientPrincipal.GEmailUser;
xLDestinatario := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlDest').Value;
xLTextoCorpo := 'Em anexo arquivo(s) para sincronização de dados em: '+ DateToStr(Now);{Memo1.Lines.Text;}
xLArqAnexos := xLArqAnexos;
xLFuncoes.EnviarEmail(xLUsuario,xLSenha,xLHost,xLPorta,xLtitulo,xLRemetente,
xLDestinatario,xLTextoCorpo,xLArqAnexos);
end;
A PROCEDURE DE ENVIO:
procedure TFuncoes.EnviarEmail(LUsuario, LSenha, LHost, LPorta, LTitulo,
LRemetente, LDestinatario,LTextoCorpo, LArqAnexos: String);
var
IdSMTP : TIdSMTP;
lMensagem : TIdMessage;
//Código para envio de mensagens
begin
try
try
IdSMTP := TIdSMTP.Create(Application);
try
lMensagem := TIdMessage.Create(Application);
idSMTP.Username := LUsuario;
idSMTP.Password := LSenha;
idSMTP.Host := LHost;
idSMTP.Port := 25;
idSMTP.Connect;
try
with lMensagem do
begin
Subject := LTitulo;
From.Address := LRemetente;
Recipients.EmailAddresses := LDestinatario;
Body.Text := LTextoCorpo;
TIdAttachmentFile.Create(MessageParts, LArqAnexos); // usado para anexar arquivos
idSMTP.Send(lMensagem);
MessageBox(0, 'E-mail enviado com Sucesso !!!', 'Envio de e-mail', MB_ICONINFORMATION or MB_OK);
end;
finally
idSMTP.Disconnect;
end;
finally
lMensagem.Free;
end;
finally
IdSMTP.Free;
end;
// Close;
except
MessageBox(0, 'Erro ao enviar e-mail'+#13+#10+'Verifique a conexão', 'Atenção', MB_ICONERROR or MB_OK);
end;
end;
No aguardo,
Jorge
Em minha aplicação estou utilizando um recurso de enviar um e-mail contendo varios anexos, só que os anexos estão sendo enviados como um arquivo .DAT.
* O Tipo de Arquivo que estou tentando enviar é .XML, Mas já tentei com outras extenções e tambem não funcionou.
Resumindo o e-mail chega mais o anexo vai errado.
Estou utilizando a seguinte codificação:
NO BOTÃO DO FORM PASSANDO PARAMETROS DE CONEXÃO
procedure TfrmGerarArquivos.btnEnviarArquivosClick(Sender: TObject);
var
xLFuncoes:TFuncoes;
xLUsuario : string;
xLSenha : string;
xLHost : string;
xLPorta : string;
xLtitulo : string;
xLRemetente : string;
xLDestinatario : string;
xLTextoCorpo : string;
xLArqAnexos : string;
begin
xLFuncoes:=TFuncoes.Create;
xLArqAnexos:= 'BSK02.xml'; +
'BSK02.xml;' +
'BSK03.xml;' +
'BSK04.xml;' +
'BSK05.xml;' +
'BSK06.xml;' +
'BSK08.xml;' +
'BSK09.xml;' +
'BSK10.xml;' +
'BSK11.xml;' +
'BSK12.xml;' +
'BSK13.xml;' +
'BSK85.xml';
DMClientPrincipal.cdsK13EMLCFG.Active:=True;
xLUsuario := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlUse') .Value;
xLSenha := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlKey') .Value;
xLHost := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlHost').Value;
xLPorta := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlPort').Value;
xLtitulo := 'Envio de Sync Atualizado - '+ DateToStr(Now);
xLRemetente := UDMClientPrincipal.GEmailUser;
xLDestinatario := DMClientPrincipal.cdsK13EMLCFG.FieldByName('EmlDest').Value;
xLTextoCorpo := 'Em anexo arquivo(s) para sincronização de dados em: '+ DateToStr(Now);{Memo1.Lines.Text;}
xLArqAnexos := xLArqAnexos;
xLFuncoes.EnviarEmail(xLUsuario,xLSenha,xLHost,xLPorta,xLtitulo,xLRemetente,
xLDestinatario,xLTextoCorpo,xLArqAnexos);
end;
A PROCEDURE DE ENVIO:
procedure TFuncoes.EnviarEmail(LUsuario, LSenha, LHost, LPorta, LTitulo,
LRemetente, LDestinatario,LTextoCorpo, LArqAnexos: String);
var
IdSMTP : TIdSMTP;
lMensagem : TIdMessage;
//Código para envio de mensagens
begin
try
try
IdSMTP := TIdSMTP.Create(Application);
try
lMensagem := TIdMessage.Create(Application);
idSMTP.Username := LUsuario;
idSMTP.Password := LSenha;
idSMTP.Host := LHost;
idSMTP.Port := 25;
idSMTP.Connect;
try
with lMensagem do
begin
Subject := LTitulo;
From.Address := LRemetente;
Recipients.EmailAddresses := LDestinatario;
Body.Text := LTextoCorpo;
TIdAttachmentFile.Create(MessageParts, LArqAnexos); // usado para anexar arquivos
idSMTP.Send(lMensagem);
MessageBox(0, 'E-mail enviado com Sucesso !!!', 'Envio de e-mail', MB_ICONINFORMATION or MB_OK);
end;
finally
idSMTP.Disconnect;
end;
finally
lMensagem.Free;
end;
finally
IdSMTP.Free;
end;
// Close;
except
MessageBox(0, 'Erro ao enviar e-mail'+#13+#10+'Verifique a conexão', 'Atenção', MB_ICONERROR or MB_OK);
end;
end;
No aguardo,
Jorge
Jorge Silva
Curtidas 0
Respostas
Rodrigo Mourão
26/03/2010
Olá Jorge,
O problema pode esta aqui:
xLArqAnexos:= 'BSK02.xml'; +
'BSK02.xml;' +
'BSK03.xml;' +
'BSK04.xml;' +
'BSK05.xml;' +
'BSK06.xml;' +
'BSK08.xml;' +
'BSK09.xml;' +
'BSK10.xml;' +
'BSK11.xml;' +
'BSK12.xml;' +
'BSK13.xml;' +
'BSK85.xml';
Vc esta passando o nome dos arquivos separado como ; . E esta anexando assim:
TIdAttachmentFile.Create(MessageParts, LArqAnexos); // usado para anexar arquivos
O problema que para cada arquivo anexo tem que ser criado um AttachmentFile. Entao o correto e colocar os arquivos numa lista e depois varrer a lista e criar os anexos. Exemplo
xLArqAnexos : TStringList;
xLArqAnexos:= TStringList.Create;
xLArqAnexos.Add('BSK02.xml');
xLArqAnexos.Add('BSK03.xml');
xLArqAnexos.Add('BSK04.xml');
xLArqAnexos.Add('BSK05.xml');
xLArqAnexos.Add('BSK06.xml');
xLArqAnexos.Add('BSK08.xml');
xLArqAnexos.Add('BSK09.xml');
xLArqAnexos.Add('BSK10.xml');
xLArqAnexos.Add('BSK11.xml');
xLArqAnexos.Add('BSK12.xml');
xLArqAnexos.Add('BSK13.xml');
xLArqAnexos.Add('BSK85.xml');
Para Enviar faça:
Body.Text := LTextoCorpo;
for I := 0 to xLArqAnexos.Count -1
begin
TIdAttachmentFile.Create(MessageParts, xLArqAnexos.Strings[I]); // usado para anexar arquivos
end;
idSMTP.Send(lMensagem);
Att,
O problema pode esta aqui:
xLArqAnexos:= 'BSK02.xml'; +
'BSK02.xml;' +
'BSK03.xml;' +
'BSK04.xml;' +
'BSK05.xml;' +
'BSK06.xml;' +
'BSK08.xml;' +
'BSK09.xml;' +
'BSK10.xml;' +
'BSK11.xml;' +
'BSK12.xml;' +
'BSK13.xml;' +
'BSK85.xml';
Vc esta passando o nome dos arquivos separado como ; . E esta anexando assim:
TIdAttachmentFile.Create(MessageParts, LArqAnexos); // usado para anexar arquivos
O problema que para cada arquivo anexo tem que ser criado um AttachmentFile. Entao o correto e colocar os arquivos numa lista e depois varrer a lista e criar os anexos. Exemplo
xLArqAnexos : TStringList;
xLArqAnexos:= TStringList.Create;
xLArqAnexos.Add('BSK02.xml');
xLArqAnexos.Add('BSK03.xml');
xLArqAnexos.Add('BSK04.xml');
xLArqAnexos.Add('BSK05.xml');
xLArqAnexos.Add('BSK06.xml');
xLArqAnexos.Add('BSK08.xml');
xLArqAnexos.Add('BSK09.xml');
xLArqAnexos.Add('BSK10.xml');
xLArqAnexos.Add('BSK11.xml');
xLArqAnexos.Add('BSK12.xml');
xLArqAnexos.Add('BSK13.xml');
xLArqAnexos.Add('BSK85.xml');
Para Enviar faça:
Body.Text := LTextoCorpo;
for I := 0 to xLArqAnexos.Count -1
begin
TIdAttachmentFile.Create(MessageParts, xLArqAnexos.Strings[I]); // usado para anexar arquivos
end;
idSMTP.Send(lMensagem);
Att,
GOSTEI 0
Jorge Silva
26/03/2010
Boa tarde Rodrigo,
Como vai ?, tudo certinho ?, Prazer em falar com você rapaz.
Rodrigo fiz o que mandou, e ele realmente mandou os 12 arquivos, mas mandou como antes com a extensão .DAT, cada um com um tamanho diferentes. Eu envio: BSK01.xml BSK02.xml BSK03.xml BSK04.xml BSK05.xml BSK06.xml BSK07.xml BSK08.xml BSK09.xml BSK10.xml BSK11.xml BSK12.xml E o que chega é:
ATT00031.DAT
ATT00034.DAT
ATT00037.DAT
ATT00040.DAT
ATT00043.DAT
ATT00046.DAT
ATT00049.DAT
ATT00052.DAT
ATT00055.DAT
ATT00058.DAT
ATT00061.DAT
ATT00064.DAT
Atente que a geração dos nomes segue a mesma formatação incrementando de 3 em 3.
Abri os arquivos em um editor de texto e vi que a informação está lá, no mesmo formato do arquivo original.
Então ele esta mandando, mas antes esta renomeando e ainda trocando a extensão. E agora ?
Fico no aguardo
Jorge
Como vai ?, tudo certinho ?, Prazer em falar com você rapaz.
Rodrigo fiz o que mandou, e ele realmente mandou os 12 arquivos, mas mandou como antes com a extensão .DAT, cada um com um tamanho diferentes. Eu envio: BSK01.xml BSK02.xml BSK03.xml BSK04.xml BSK05.xml BSK06.xml BSK07.xml BSK08.xml BSK09.xml BSK10.xml BSK11.xml BSK12.xml E o que chega é:
ATT00031.DAT
ATT00034.DAT
ATT00037.DAT
ATT00040.DAT
ATT00043.DAT
ATT00046.DAT
ATT00049.DAT
ATT00052.DAT
ATT00055.DAT
ATT00058.DAT
ATT00061.DAT
ATT00064.DAT
Atente que a geração dos nomes segue a mesma formatação incrementando de 3 em 3.
Abri os arquivos em um editor de texto e vi que a informação está lá, no mesmo formato do arquivo original.
Então ele esta mandando, mas antes esta renomeando e ainda trocando a extensão. E agora ?
Fico no aguardo
Jorge
GOSTEI 0
Rodrigo Mourão
26/03/2010
Rapaz, isso e muito estranho.
Mas vamos tentar mais um coisa, existe um propriedade onde dizemos o tipo de informação que estamos enviando, neste caso se nao me engano e multipart.
Vou verificar a sintaxe e te informo.
Att,
Mas vamos tentar mais um coisa, existe um propriedade onde dizemos o tipo de informação que estamos enviando, neste caso se nao me engano e multipart.
Vou verificar a sintaxe e te informo.
Att,
GOSTEI 0
Jorge Silva
26/03/2010
Realmente estranho,
Estava procurando na internet e vi que é mais comum que eu esperava, mas até agora não vi uma resposta para aquestão.
No aguardo
Jorge
Estava procurando na internet e vi que é mais comum que eu esperava, mas até agora não vi uma resposta para aquestão.
No aguardo
Jorge
GOSTEI 0
Wesley Yamazack
26/03/2010
Olá amigo, estou agora à frente deste seu chamado, e irei dar continuidade. ok ?Vamos lá!!!
Os endereços de envio de e-mail e o remetente, ambos são de um domínio próprio ? Ou você esta usando Gmail/Hotmail, por exemplo?
Você já tentou mandar para outro e-mail ? Já tentou mandar os XML's compactados ?
Um abraço
Wesley Y
Os endereços de envio de e-mail e o remetente, ambos são de um domínio próprio ? Ou você esta usando Gmail/Hotmail, por exemplo?
Você já tentou mandar para outro e-mail ? Já tentou mandar os XML's compactados ?
Um abraço
Wesley Y
GOSTEI 0
Jorge Silva
26/03/2010
Ola Wesley,
Ja enviei para o mesmo dominio para dominios diferentes, arquivos .xml, arquivos .txt, arquivo.xls e nada.
o arquivo que eu mandar sempre chega do mesmo jeito.
Jorge
Ja enviei para o mesmo dominio para dominios diferentes, arquivos .xml, arquivos .txt, arquivo.xls e nada.
o arquivo que eu mandar sempre chega do mesmo jeito.
Jorge
GOSTEI 0
Wesley Yamazack
26/03/2010
Olá amigo, peço que aguarde um pouco, para que eu possa montar um exemplo e lhe enviar.
Um abraço
Wesley Y
Um abraço
Wesley Y
GOSTEI 0
Jorge Silva
26/03/2010
ok,
Fico no aguardo
Jorge
Fico no aguardo
Jorge
GOSTEI 0
Wesley Yamazack
26/03/2010
Olá amigo, eu tenho um disparador de e-mail que achei aqui, nele codifiquei o seguinte :
procedure TFrmPrincipal.BitBtn8Click(Sender: TObject);
Var
I,J : Integer;
Tot : Currency;
begin
for I := 0 to ChckLstBxEmail.Count - 1 do
begin
if ((ChckLstBxEmail.Checked[I]) and
(ChckLstBxEmail.State[I] <> cbGrayed)) then
begin
with IdMessage do
begin
Recipients.Clear;
CCList.Clear;
Body.Clear;
Recipients.Add.Address := ChckLstBxEmail.Items.Strings[I];
From.Name := EdtNomeRemetente.Text ;
From.Address := EdtEmailRemetente.Text;
Subject := EdtAssuntoEmail.Text ;
Date := Date ;
if EdtCC.Text <> '' then
CCList.Add.Address := EdtCC.Text ;
MessageParts.Clear;
ContentType := 'text/plain';
TIdAttachmentFile.Create(MessageParts,'C:\Wesley.XML');
IdSMTP.Connect;
IdSMTP.Send(IdMessage);
IdSMTP.Disconnect;
end;
end;
end;
end;
O arquivo XML, foi normalmente, veja se isso irá lhe ajudar.
Obs : Faça adaptações no seu código para funcionar.
Um abraço
Wesley Y
procedure TFrmPrincipal.BitBtn8Click(Sender: TObject);
Var
I,J : Integer;
Tot : Currency;
begin
for I := 0 to ChckLstBxEmail.Count - 1 do
begin
if ((ChckLstBxEmail.Checked[I]) and
(ChckLstBxEmail.State[I] <> cbGrayed)) then
begin
with IdMessage do
begin
Recipients.Clear;
CCList.Clear;
Body.Clear;
Recipients.Add.Address := ChckLstBxEmail.Items.Strings[I];
From.Name := EdtNomeRemetente.Text ;
From.Address := EdtEmailRemetente.Text;
Subject := EdtAssuntoEmail.Text ;
Date := Date ;
if EdtCC.Text <> '' then
CCList.Add.Address := EdtCC.Text ;
MessageParts.Clear;
ContentType := 'text/plain';
TIdAttachmentFile.Create(MessageParts,'C:\Wesley.XML');
IdSMTP.Connect;
IdSMTP.Send(IdMessage);
IdSMTP.Disconnect;
end;
end;
end;
end;
O arquivo XML, foi normalmente, veja se isso irá lhe ajudar.
Obs : Faça adaptações no seu código para funcionar.
Um abraço
Wesley Y
GOSTEI 0
Jorge Silva
26/03/2010
Wesley,
Não ficou muito claro, qual é a linha que informa/controla o formato do arquivo em anexo ?
Para que serve a linha: ContentType := 'text/plain';
agora o corpo do e-mail exibe tipo uma representação dos arquivos em um formato não legivel.
o codigo que adaptei foi o seguinte favor verificar:
procedure TFuncoes.EnviarEmail(LUsuario, LSenha, LHost, LPorta, LTitulo,
LRemetente, LDestinatario, LTextoCorpo: String; LArqAnexos: TStringlist);
var
IdSMTP : TIdSMTP;
lMensagem : TIdMessage;
I:Integer;
//Código para envio de mensagens
begin
try
try
IdSMTP := TIdSMTP.Create(Application);
try
lMensagem := TIdMessage.Create(Application);
idSMTP.Username := LUsuario;
idSMTP.Password := LSenha;
idSMTP.Host := LHost;
idSMTP.Port := 25;
idSMTP.Connect;
lMensagem.MessageParts.Clear;
try
with lMensagem do
begin
Subject := LTitulo;
From.Address := LRemetente;
Recipients.EmailAddresses := LDestinatario;
Body.Text := LTextoCorpo;
ContentType := 'text/plain';
for I := 0 to LArqAnexos.Count -1 do
begin
TIdAttachmentFile.Create(MessageParts, LArqAnexos.Strings[I]); // usado para anexar arquivos
end;
idSMTP.Send(lMensagem);
MessageBox(0, 'E-mail enviado com Sucesso !!!', 'Envio de e-mail', MB_ICONINFORMATION or MB_OK);
end;
finally
idSMTP.Disconnect;
end;
finally
lMensagem.Free;
end;
finally
IdSMTP.Free;
end;
// Close;
except
MessageBox(0, 'Erro ao enviar e-mail'+#13+#10+'Verifique a conexão', 'Atenção', MB_ICONERROR or MB_OK);
end;
end;
Não ficou muito claro, qual é a linha que informa/controla o formato do arquivo em anexo ?
Para que serve a linha: ContentType := 'text/plain';
agora o corpo do e-mail exibe tipo uma representação dos arquivos em um formato não legivel.
o codigo que adaptei foi o seguinte favor verificar:
procedure TFuncoes.EnviarEmail(LUsuario, LSenha, LHost, LPorta, LTitulo,
LRemetente, LDestinatario, LTextoCorpo: String; LArqAnexos: TStringlist);
var
IdSMTP : TIdSMTP;
lMensagem : TIdMessage;
I:Integer;
//Código para envio de mensagens
begin
try
try
IdSMTP := TIdSMTP.Create(Application);
try
lMensagem := TIdMessage.Create(Application);
idSMTP.Username := LUsuario;
idSMTP.Password := LSenha;
idSMTP.Host := LHost;
idSMTP.Port := 25;
idSMTP.Connect;
lMensagem.MessageParts.Clear;
try
with lMensagem do
begin
Subject := LTitulo;
From.Address := LRemetente;
Recipients.EmailAddresses := LDestinatario;
Body.Text := LTextoCorpo;
ContentType := 'text/plain';
for I := 0 to LArqAnexos.Count -1 do
begin
TIdAttachmentFile.Create(MessageParts, LArqAnexos.Strings[I]); // usado para anexar arquivos
end;
idSMTP.Send(lMensagem);
MessageBox(0, 'E-mail enviado com Sucesso !!!', 'Envio de e-mail', MB_ICONINFORMATION or MB_OK);
end;
finally
idSMTP.Disconnect;
end;
finally
lMensagem.Free;
end;
finally
IdSMTP.Free;
end;
// Close;
except
MessageBox(0, 'Erro ao enviar e-mail'+#13+#10+'Verifique a conexão', 'Atenção', MB_ICONERROR or MB_OK);
end;
end;
GOSTEI 0
Wesley Yamazack
26/03/2010
Olá amigo,
Faça uma alteração mude a linha vermelha por ContentType := 'multipart/mixed'; assim sua mensagem irá com anexo e o conteúdo do e-mail . Esta é a linha que define que o e-mail vai ter partes mistas, tanto corpo, como arquivo anexo.
Um abraço
Wesley Y
Faça uma alteração mude a linha vermelha por ContentType := 'multipart/mixed'; assim sua mensagem irá com anexo e o conteúdo do e-mail . Esta é a linha que define que o e-mail vai ter partes mistas, tanto corpo, como arquivo anexo.
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
26/03/2010
Olá amigo, e ai consegui fazer a alteração o envio do e-mail funcionou ?
Um abraço
Wesley Y
Um abraço
Wesley Y
GOSTEI 0
Jorge Silva
26/03/2010
Wesley,
Desculpe a demora na resposta, mas estava sem internet, mas pode fechar o chamado agora funcionou, não testei com outro tipo de arquivo mas provavelmente não vai dar problema.
Pode fecher o chamado
Obrigado novamente, Até a proxima.
Jorge
Desculpe a demora na resposta, mas estava sem internet, mas pode fechar o chamado agora funcionou, não testei com outro tipo de arquivo mas provavelmente não vai dar problema.
Pode fecher o chamado
Obrigado novamente, Até a proxima.
Jorge
GOSTEI 0
Wesley Yamazack
26/03/2010
Grande Jorge, estamos a disposição se precisar estamos aqui .
Um abraço
Wesley Y
Um abraço
Wesley Y
GOSTEI 0