Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2016, 16:36
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Indy 10 прием почты (кодировка темы письма)

День добрый.
Программа принимает почту pop3.
Раньше у меня стаяла старая версия Indy.
При приеме тема была примерно такая
Код:
Msg.Subject=A
А=
=?koi8-r?Ляляляля ==?=
Далее у меня есть функция, которая декодирует текст по этим тэгам.


Теперь я обновился до Indy 10 и тема выводится без тэгов " =?koi8-r?".
То есть совершенно не понятно когда ее надо декодировать, когда нет.
Вопрос как из IdMessage вытащить Subject c тэгами? Или может быть можно вытащить кодировку?
Ответить с цитированием
  #2  
Старый 13.05.2016, 06:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
TIdMessage.NoDecode := True;

Кстати, покажи функцию - что умеет (точнее, какие кодировки знает)?
Ответить с цитированием
  #3  
Старый 16.05.2016, 13:23
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Нашел на просторах глубокого интернета, правда немного изменил
строки 8-23 от меня, на случай длинного заголовка.
http://www.sql.ru/forum/883437/pop3-...roblema-decode
Код:
function DecodeStr(Text: String): String;
Var
    P,P2,pz:Integer;
    Temp,Dec, temp2 : String;
  begin
    Result:='';

    if pos('=?',text)=0 then result:=text;
    if pos('=?',text)>1 then
    result:=copy(text,1,pos('=?',text)-1);

  temp2:=StringReplace(text,' ','', [rfReplaceAll, rfIgnoreCase]);

    Temp2:=Copy(Temp2,Pos('=?',LowerCase(temp2)),Length(temp2));
      repeat

      pz:=Pos('?=',LowerCase(temp2))+1;
      if pz=2 then  pz:=Pos('?=',LowerCase(temp2))+1;
       if pz<15 then
      pz:=length(temp2);

       temp:=Copy(Temp2,Pos('=?',LowerCase(temp2)),pz);
        delete(temp2,1,pz);
     
    while pos('=?UTF-8?',UpperCase(Temp))>0 do begin

      P:=pos('=?UTF-8?',UpperCase(Temp));
      P2:=length(temp)-1;
      Dec := Copy(Temp,p+10,P2-(P+10));
      if UpperCase(Temp[P+8])='Q' then
        Dec := Form2.IdDecoderQuotedPrintable1.DecodeString(Dec)
      Else
        Dec:=IdDecoderMIME1.DecodeString(Dec);
      
      Dec:=Utf8ToAnsi(Dec);

      Result:=Result+Copy(Temp,1,P-1)+Dec;
      Temp:=Copy(Temp,P2+2,length(Temp));
    End;

    while pos('=?KOI8-R?',UpperCase(Temp))>0 do begin
      P:=pos('=?KOI8-R?',UpperCase(Temp));
      P2:=pos('?=',Temp);
      Dec := Copy(Temp,p+11,P2-(P+11));
      if UpperCase(Temp[P+9])='Q' then
        Dec := Form2.IdDecoderQuotedPrintable1.DecodeString(Dec)
      Else
        Dec:=IdDecoderMIME1.DecodeString(Dec);
      Dec:=B_KOI8R2ANSI(Dec);
      Result:=Result+Copy(Temp,1,P-1)+Dec;
      Temp:=Copy(Temp,P2+2,length(Temp));
    End;

    while pos('=?WINDOWS-1251?',UpperCase(Temp))>0 do begin
      P:=pos('=?WINDOWS-1251?',UpperCase(Temp));
      P2:=pos('?=',Temp);
      Dec := Copy(Temp,p+17,P2-(P+17));

      if UpperCase(Temp[P+15])='Q' then
        Dec := Form2.IdDecoderQuotedPrintable1.DecodeString(Dec)
      Else
            Dec:=IdDecoderMIME1.DecodeString(Dec);
      Result:=Result+Copy(Temp,1,P-1)+Dec;
      Temp:=Copy(Temp,P2+2,length(Temp));
    End;
    until length(temp2)<5;

  end;


function B_KOI8R2ANSI(S: string): string;
Const
  KOI8_CODE = 'бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС—Ј';
  ANSI_CODE = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ё';
var
  i: integer;
begin
  Result := S;
  for i := 1 to Length(Result) do
    if Pos(Result[i], KOI8_CODE) > 0 then
      Result[i] := ANSI_CODE [Pos(Result[i], KOI8_CODE)];
end;
Ответить с цитированием
  #4  
Старый 16.05.2016, 14:07
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

NoDecode увы не прокатило ((((.

Пока решение такое:
Код:
Tema:=msg.Headers.Values['Subject']
Ответить с цитированием
  #5  
Старый 17.05.2016, 06:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ага, тоже вариант.
Мда, по коду. Интересно, но это только для русских кодировок... хотя на вооружение стоит взять...
Ответить с цитированием
  #6  
Старый 19.05.2016, 11:27
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Кодировка имения файла

Вот вопрос, а как получить исходную кодировку имени файла?
Ответить с цитированием
  #7  
Старый 19.05.2016, 16:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Эм-м-м... не понял вопрос?
Какого файла?
Ответить с цитированием
  #8  
Старый 20.05.2016, 17:52
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Имя файла, в аттачменте тоже кодируется.
Как достать кодировку, которой было закодировано имя файл
Ответить с цитированием
  #9  
Старый 21.05.2016, 05:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так оно тоже тем же способом, видимо, кодируется.
Еще в заголовке должен быть параметр - charset. Это языковая кодировка...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter