Recebendo e-mail com delphi (Indy)
Boa tarde,
Estou fazendo um sistema de recebimento de email pelo Delphi, no qual o mesmo grava as movimentações de um processo judicial no banco de dados. O problema é que quando trago o email ele me traz no lugar dos caracteres especiais o símbolo "?", alguém pode me ajudar, já não sei mais o que tentar.
Segue o código abaixo.
Estou fazendo um sistema de recebimento de email pelo Delphi, no qual o mesmo grava as movimentações de um processo judicial no banco de dados. O problema é que quando trago o email ele me traz no lugar dos caracteres especiais o símbolo "?", alguém pode me ajudar, já não sei mais o que tentar.
Segue o código abaixo.
procedure TForm2.Button1Click(Sender: TObject);
var
fTotal_Msgs, I, IdEmail: Integer;
Rec: array of TIdIMAP4SearchRec;
IMessage: TIdMessage;
fEmail: String;
begin
{ *** passa os parametros para a conexão do IMAP *** }
IdIMAP41.Host := 'imap.gmail.com';
IdIMAP41.Username := usuario;
IdIMAP41.Password := senha;
IdIMAP41.Port := 993;
IdIMAP41.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
IdIMAP41.UseTLS := utUseImplicitTLS;
{ *** passa os paramentros para a conexão do Handler *** }
IdSSLIOHandlerSocketOpenSSL1.Destination := 'imap.gmail.com:993';
IdSSLIOHandlerSocketOpenSSL1.Host := 'imap.gmail.com';
IdSSLIOHandlerSocketOpenSSL1.Port := 993;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv3;
try
IdIMAP41.Connect;
if IdIMAP41.Connected then
begin
Button1.Enabled := False;
Button2.Enabled := True;
StatusBar2.Panels[0].Text := 'conectado ao e-mail';
IdIMAP41.SelectMailBox('INBOX');
fTotal_Msgs := IdIMAP41.MailBox.TotalMsgs;
Label1.Caption := 'Existem ' + IntToStr(fTotal_Msgs) + ' mensagens';
{ *** verifica a quantidade de mensagens não lidas *** }
SetLength(Rec, 1);
Rec[0].SearchKey := skUnseen;
Rec[0].Text := '';
if not IdIMAP41.SearchMailBox(Rec) then
raise Exception.Create('Erro na pesquisa da caixa postal');
fTotal_Msgs := Length(IdIMAP41.MailBox.SearchResult);
Label2.Caption := 'Total de Mensagens não lidas: ' + IntToStr(fTotal_Msgs);
for I := 0 to Pred(fTotal_Msgs) do
begin
IMessage := TIdMessage.Create(nil);
IMessage.IsEncoded := True;
IMessage.NoDecode := True;
IMessage.ConvertPreamble := False;
IMessage.AttachmentEncoding := 'MIME';
IMessage.ContentType := 'multipart/mixed';
IMessage.CharSet := 'ISO-8859-1';
IMessage.ContentTransferEncoding := '16bit';
IdEmail := IdIMAP41.MailBox.SearchResult[I];
{ *** recupera o email completo*** }
IdIMAP41.Retrieve(IdEmail, IMessage);
AnsiToUtf8(IMessage.Body.Text);
IMessage.IsEncoded := True;
IMessage.NoDecode := True;
IMessage.ConvertPreamble := False;
IMessage.AttachmentEncoding := 'MIME';
IMessage.ContentType := 'multipart/mixed';
IMessage.CharSet := 'ISO-8859-1';
IMessage.ContentTransferEncoding := '16bit';
// fEmail := UTF8Decode(IMessage.Body.Text); <-- Tentei deste jeito mas não deu certo.
fEmail := IMessage.Body.Text;
fEmail := LowerCase(fEmail);
Memo1.Clear;
Memo1.Text := fEmail;
Exit;
IMessage.SaveToFile(ExtractFilePath(Application.ExeName) + 'teste' +
IntToStr(I) + '.txt');
end;
end;
except
StatusBar2.Panels[0].Text := 'problemas ao conectar ao e-mail';
end;Edinilso Pera
Curtidas 1