Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2013, 15:54   #1
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию письма от Gmail

Доброго времени суток.
на сервер пришло письмо
Цитата:
Date: Thu, 17 Jan 2013 17:35:13 +0600
Message-ID: <CAJ-P0tSpYL0-ENyf=qgGXWfhUu8XF7_o5hZsm4Lire32eYP xDg@mail.gmail.com>
Subject: test
From: Barney <******@gmail.com>
To: test@*******.ru
Content-Type: multipart/alternative; boundary=f46d0434bf1e62475104d37a63 3c

--f46d0434bf1e62475104d37a633c
Content-Type: text/plain; charset=KOI8-R
Content-Transfer-Encoding: base64

ZGZkc2Zkc2Zkc2ZkCtfQ19nQ19nQ19nQCmR nc2Rnc2RnCtfQ2dfZ19DZ19AK
--f46d0434bf1e62475104d37a633c
Content-Type: text/html; charset=KOI8-R
Content-Transfer-Encoding: base64
При с читывание писем от mail, yandex всё нормально тело письма я получаю... но тут оно возвращается пустым...вопрос как считать тело вот этго письма.
Считываю
Код:
function TForm1.upmessage: Longint;
var
  exp:string;
  position,p:Integer;
   msCount,i,ii,c:Integer;
   MessPart:TIdMessagePart;
begin
try
IdPOP31.Connect;
msCount:=IdPOP31.CheckMessages;
  if  msCount>0 then
  begin
    for i:=1 to msCount do
  begin
      IdMessage1.Clear;
      //IdMessage1.ContentType:='multipart/mixed';
     // IdMessage1.ContentType:='text/plain';
      IdPOP31.Retrieve(i,IdMessage1);
      lbl1.Caption:=IdMessage1.Subject;
      lbl2.Caption:=IdMessage1.From.Address;
      lbl3.Caption:=DateToStr(IdMessage1.Date);
      Label1.Caption := IdMessage1.CCList.EMailAddresses;
      Label2.Caption := IdMessage1.Organization;
       mmo1.Clear;
   // тут он пустой. если письмо c Gmail
      if IdMessage1.Body.Text='This is a multi-part message in MIME format' then
      begin
      for ii := 0 to IdMessage1.MessageParts.Count-1 do
        begin
          MessPart:=IdMessage1.MessageParts[ii];
          if MessPart.PartType=mptText then
          begin
            mmo1.Lines.Add(TIdText(MessPart).Body.Text);
          end;
        end;
      end
      else
      mmo1.Lines.Add(IdMessage1.Body.Text);

    //  IdPOP31.Delete(i);
    end;
    IdPOP31.Disconnect
  end
  else
  begin
    ShowMessage('Писем нет!');
    IdPOP31.Disconnect;
  end;
except
IdPOP31.Disconnect;
end;

end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 17.01.2013, 17:32   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

может synapse попробовать...
Кольша вне форума Ответить с цитированием
Старый 18.01.2013, 07:02   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а чего стандартными компанентами уже проблема письма с ящика прочитать? 0_О
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 18.01.2013, 08:59   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

зачем лишние проверки?
Код:
mmo1.Lines.Add(IdMessage1.Body.Text);
      for ii := 0 to IdMessage1.MessageParts.Count-1 do
        begin
          MessPart:=IdMessage1.MessageParts[ii];
          if MessPart.PartType=mptText then
            mmo1.Lines.Add(TIdText(MessPart).Body.Text);
        end;
      end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 18.01.2013, 22:54   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

тут зависит от сервера который мне прислал письмо...допустим у kerio письма приходят в MIME и если считывать mmo1.Lines.Add(IdMessage1.Body.Text );
то в мемо будет писатьсообщение об этом то можно и погуглить это к теме не относится
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 23.01.2013, 15:26   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

в общем решил проблему тему можно закрыть.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 09.10.2014, 08:39   #7
newbas
Новичок
Джуниор
 
Регистрация: 09.10.2014
Сообщений: 1
По умолчанию

Цитата:
в общем решил проблему тему можно закрыть.
Не расскажете как? Столкнулся с такой же проблемой
newbas вне форума Ответить с цитированием
Старый 13.10.2014, 06:47   #8
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Ну за такой некропост подскажу
если Content-Transfer-Encoding: base64 то

Код:
function DecodeBase64(const CinLine: Ansistring): Ansistring;
const
  RESULT_ERROR = -2;
var
  inLineIndex: Integer;
  c: ansiChar;
  x: SmallInt;
  c4: Word;
  StoredC4: array[0..3] of SmallInt;
  InLineLength: Integer;
begin
  Result := '';
  inLineIndex := 1;
  c4 := 0;
  InLineLength := Length(CinLine);

  while inLineIndex <= InLineLength do
  begin
    while (inLineIndex <= InLineLength) and (c4 < 4) do
    begin
      c := CinLine[inLineIndex];
      case c of
        '+'     : x := 62;
        '/'     : x := 63;
        '0'..'9': x := Ord(c) - (Ord('0')-52);
        '='     : x := -1;
        'A'..'Z': x := Ord(c) - Ord('A');
        'a'..'z': x := Ord(c) - (Ord('a')-26);
      else
        x := RESULT_ERROR;
      end;
      if x <> RESULT_ERROR then
      begin
        StoredC4[c4] := x;
        Inc(c4);
      end;
      Inc(inLineIndex);
    end;

    if c4 = 4 then
    begin
      c4 := 0;
      Result := Result + ansiChar((StoredC4[0] shl 2) or (StoredC4[1] shr 4));
      if StoredC4[2] = -1 then Exit;
      Result := Result + ansiChar((StoredC4[1] shl 4) or (StoredC4[2] shr 2));
      if StoredC4[3] = -1 then Exit;
      Result := Result + ansiChar((StoredC4[2] shl 6) or (StoredC4[3]));
    end;
  end;
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Письма уходит в спам Gmail GriFFoN PHP 4 08.04.2012 19:08
Фреймы как в gmail keen_ HTML и CSS 3 12.12.2011 01:19
Получение почты с GMAIL KoBRaAndrey Работа с сетью в Delphi 11 06.12.2009 23:33
Gmail Veytarn Свободное общение 20 23.08.2009 15:40
Креативщики GMail ;') SkyM@n Свободное общение 6 24.05.2008 18:47