Показать сообщение отдельно
  #3  
Старый 27.10.2014, 14:10
ivankom ivankom вне форума
Прохожий
 
Регистрация: 04.02.2014
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Оказывается это сообщение состоит из нескольких частей. Если смотреть заголовки через почтовый клиент, то они будут такими:
Код:
Content-Type: multipart/mixed;
    boundary="----=_Part_2_161819575.1413783727126"

А то, что я писал выше, это выдавал мне делфи, функцией idMessage1.SaveToFile

Вот, нашел как прочитать сообщение в котором только одна часть.

Код:
Memo1.Lines:= (IdMessage1.MessageParts.Items[0] as TIdText).Body;

Подскажите как правильно написать условие для проверки Content-Type
У меня почему-то срабатывает и до else и после

Код:
begin
  if not idIMAP41.Connected then
  begin
    AddToLog(' Невозможно подключиться к почтовому серверу. Попытка подключения... Error ' + IntToStr(GetLastError));
    IdIMAP41.Host := IniConf.ReadString('mail','host','');
    IdIMAP41.Port := IniConf.ReadInteger('mail','port',993);
    IdIMAP41.Username := IniConf.ReadString('mail','username','');
    IdIMAP41.Password := IniConf.ReadString('mail','password','');
    IdIMAP41.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdIMAP41);
    IdIMAP41.UseTLS := utUseImplicitTLS;
    idIMAP41.Connect;
    if idIMAP41.Connected then
    AddToLog(' Содинение с почтовым сервером!');
  end;

    IdIMAP41.SelectMailBox('INBOX');
     for i := IdIMAP41.MailBox.TotalMsgs downto 1 do
    begin
    idIMAP41.Retrieve(i, idMessage1);
    begin
      begin
      if idMessage1.ContentType = 'multipart/mixed' then
      begin
       tstr := (IdMessage1.MessageParts.Items[0] as TIdText).Body;
       mailbody := tstr.Text;
      end
     else
       mailbody := idMessage1.Body.Text;  //получаем тело сообщения
     end;
      address := idMessage1.From.Address; //получаем адрес отправителя
      subj := idMessage1.Subject;
      rcpt := idMessage1.Recipients.EMailAddresses;
     ...
Ответить с цитированием