PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Recebendo e-mail com delphi (Indy) #536272

03/11/2015

0

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.
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

Edinilso Pera

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar