Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.04;
Скачать: CL | DM;

Вниз

получить письмо в windows1251    Найти похожие ветки 

 
XAOC ©   (2008-03-26 15:46) [0]

как получить читабельное письмо отправленное из Outlook"a (KOI8-R)  ?
компонентами indy 10


 
Reindeer Moss Eater ©   (2008-03-26 16:07) [1]

получить ?
или
получив кои8р перекодировать в читабельный 1251?


 
XAOC ©   (2008-03-26 16:17) [2]

письмо я получаю, а вот по-русски не читается


IdPOP31.Password:=EditPassword.Text;
IdMessage1.Clear;

try
 IdPOP31.Connect;
 Memo1.Clear; Memo2.Clear;
 IdPOP31.Retrieve(1,IdMessage1);
 Label14.Caption := "From: "          + IdMessage1.From.Text;
 Label15.Caption := "Recepients: "        + IdMessage1.Recipients.EmailAddresses;
 Label17.Caption := "Subject: "        + IdMessage1.Subject;
 Memo1.Lines.AddStrings(IdMessage1.Body);
finally
 IdPOP31.Disconnect;
end;


 
XAOC ©   (2008-03-26 16:19) [3]

кстати, то что я отсылаю - в аутлуке тоже не читается


 
Reindeer Moss Eater ©   (2008-03-26 16:19) [4]

ну все верно. кодировка-то у него koi8-r


 
XAOC ©   (2008-03-26 16:24) [5]

пробовал
Memo2.Lines:= (IdMessage1.MessageParts.Items[0] as TIdText).Body
пишет что не знает TIdText

пробовал IdMessageDecoderMIME и IdDecoderMIME использовать. обругался на потоки. и мануала на него нет.


 
Reindeer Moss Eater ©   (2008-03-26 16:38) [6]

И при чем здесь майм?
Ты еще монитор попробуй протереть. Вдруг проканает.
Ответ уже есть в [1]


 
Reindeer Moss Eater ©   (2008-03-26 16:43) [7]

Для начала откуси старший бит у каждого символа в теле письма.
Если после этого увидишь транслит - ищи функцию перекодировки кои8r в вин-1251.


 
XAOC ©   (2008-03-26 16:56) [8]

ммм...
в общем так. стояла у меня indy 9 стандартная. с кодом

Memo1.Lines.AddStrings(IdMessage1.Body);
Memo2.Lines:= (IdMessage1.MessageParts.Items[0] as TIdText).Body
Memo3.Lines:= (IdMessage1.MessageParts.Items[1] as TIdText).Body

получаю в
memo1 - This is a multi-part message in MIME format.
memo2 - йОПЧИЧОПЧИ (что-то типа этого )))
memo3 - KOI8-R
но при этом в Outlook"e писмо высланное из моей проги читалось.

теперь поставил indy 10
ругается на TIdText. в Uses "IdMessage" прописано. ХЗ думаю. лезу смотреть, а там и нету TIdText. вот.
теперь в outlook"e своего письма прочитать не могу
         и из своей проги Outlook"овое письо не могу прочесть


 
MedEx   (2008-07-29 16:45) [9]

AnsiString s,SKoi,SWin,N,C;
   SKoi="__ёАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";
   SWin="ёЁTюабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ";
   int k=0;

for(int j=1;j<=s.Length();j++)
              {
                 C=s[j];
                 k=AnsiPos(C,SKoi);
                 if(k==0)
                    {
                       N+=s[j];
                    }
                 else N+=SWin[k];
              }

   Memo1->Lines->Add(N);

в мемо строка (s) переданная в формате koi8r,записывается (N) в win1251


 
Сергей М. ©   (2008-07-29 20:11) [10]


> XAOC


У 10-х индейцев есть изящный интерфейс подключения любого кодека)


 
a.a.j. ©   (2008-07-31 09:50) [11]

var
 M: TIdMessage;
...
 M := TIdMessage.Create(Form1);
 M.CharSet := "windows-1251";
...
 if IdSMTP1.Connected then
 begin
   IdSMTP1.Send(M);
 end;


?


 
Anatoly Podgoretsky ©   (2008-07-31 10:26) [12]

Получить это никак не send


 
Сергей М. ©   (2008-07-31 11:40) [13]


>  M.CharSet := "windows-1251";


windows-1251 - это ни разу ни KOI8-R


 
yarik1980 ©   (2008-11-28 14:41) [14]

В 10 indy пришлось пойти таким путем (это для текста который в теле письма):
function trans(str:string):string;
 var qwe:TOracleQuery;
begin
 qwe:= TOracleQuery.Create(self);
 qwe.SQL.Text:= "SELECT translate(:str, ""ёЁTюабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"", ""__ёАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"") res FROM dual";
 qwe.DeclareVariable("str", otString);
 qwe.Session:=fmMainForm.OraSession;
 qwe.SetVariable("str", str);
 try
  qwe.Execute;
  result:=qwe.FieldAsString("res");
 except
   result:=str;
 end;
 qwe.Free;
end;


 
Сергей М. ©   (2008-11-28 14:53) [15]


> В 10 indy пришлось пойти таким путем


Кулибин)


unit MsgHdrCoders;

interface

uses
 IdHeaderCoderPlain;

type
 TCodeMatrix = array[1..255] of char;

const
 FirstCodes =
   #1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#27#28+
  #29#30#31" !"#$%&""()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^" +
   "_`abcdefghijklmnopqrstuvwxyz{|}~";
 cmAnsiToKoi8R: TCodeMatrix = FirstCodes
 + "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—?™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·Ј—є»јЅѕїбвчздецъй"
   + "клмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС";
 cmAnsiToKoi8U: TCodeMatrix = FirstCodes
 + "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—?™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·Ј—є»јЅѕїбвчздецъй"
   + "клмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС";
 cmKoi8RToAnsi: TCodeMatrix = FirstCodes
 + "-¦-¬L-++T++---¦¦---?¦•v??? ?°?·?=¦-ёг㬬¬LLL---¦¦¦¦Ё¦¦TTT¦¦¦+++©юабцдефгх"
   + "ийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ";
 cmKoi8UToAnsi: TCodeMatrix = FirstCodes
 + "-¦-¬L-++T++---¦¦---?¦•v??? ?°?·?=¦-ёєгії¬LLL-ґў¦¦¦¦ЁЄ¦ІЇT¦¦¦+ҐЎ©юабцдефгх"
   + "ийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ";
 cmOemDosToAnsi: TCodeMatrix = FirstCodes
 + "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп---¦+¦¦¬¬¦¦¬---¬L+T+-+¦¦L"
   + "г¦T¦=+¦¦TTLL-г++----¦¦-рстуфхцчшщъыьэюяЁёЄєЇїЎў°•·v№¤¦ ";
 cmIsoToAnsi: TCodeMatrix = FirstCodes
 + "???????????????????????????????? ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШ"
   + "ЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ";
type

 TIdHeaderCoderKOI8 = class(TIdHeaderCoderPlain)
 public
   class function Decode(const ACharSet, AData: String): String; override;
   class function Encode(const ACharSet, AData: String): String; override;
   class function CanHandle(const ACharSet: String): Boolean; override;
 end;

function ConvertCharset(AString: String; AMatrix: TCodeMatrix): String;

implementation

uses IdGlobal, IdHeaderCoderBase;

function ConvertCharset(AString: String; AMatrix: TCodeMatrix): String;
var
 i: Integer;
begin
 Result := "";
 for i:= 1 to Length(AString) do
   Result := Result + AMatrix[Ord(AString[i])];
end;

{ TIdHeaderCoderKOI8 }

class function TIdHeaderCoderKOI8.CanHandle(const ACharSet: String): Boolean;
begin
 Result := TextIsSame(ACharSet, "KOI8-R") or TextIsSame(ACharSet, "KOI8-U");
end;

class function TIdHeaderCoderKOI8.Decode(const ACharSet, AData: String): String;
begin
 if TextIsSame(ACharSet, "KOI8-R") then
   Result := ConvertCharset(AData, cmKoi8RToAnsi)
 else if TextIsSame(ACharSet, "KOI8-U") then
   Result := ConvertCharset(AData, cmKoi8UToAnsi);
end;

class function TIdHeaderCoderKOI8.Encode(const ACharSet, AData: String): String;
begin
 if TextIsSame(ACharSet, "KOI8-R") then
   Result := ConvertCharset(AData, cmAnsiToKoi8R)
 else if TextIsSame(ACharSet, "KOI8-U") then
   Result := ConvertCharset(AData, cmAnsiToKoi8U);
end;

initialization
 RegisterHeaderCoder(TIdHeaderCoderKOI8);
finalization
 UnregisterHeaderCoder(TIdHeaderCoderKOI8);
end.


 
имя   (2009-07-04 22:44) [16]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2011.12.04;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.274 c
15-1309448004
R_R
2011-06-30 19:33
2011.12.04
Фундаментальные шахматы...


15-1313471235
Xmen
2011-08-16 09:07
2011.12.04
Интерфейс не поддерживается.


6-1246539062
GanibalLector
2009-07-02 16:51
2011.12.04
Работа с сокетами (теория)


15-1313440203
Юрий
2011-08-16 00:30
2011.12.04
С днем рождения ! 16 августа 2011 вторник


4-1252479375
d@vinchi
2009-09-09 10:56
2011.12.04
COM сервер в службе...