1

使用: Delphi XE2、デフォルト言語として米国英語を使用する Windows 8

Delphi で電子メール クライアントを作成しています。TIdIMAP4 を使用して IMAP 経由で GMail メールボックスに接続し、次のようなメッセージ リストを取得しています。

  var
   MessageList: TIdMessageCollection;
  begin
   IMAPClnt.SelectMailBox('INBOX');
   IMAPClnt.UIDRetrieveAllEnvelopes(IMAPClnt.MessageList);

次に、次のようにメッセージの件名を取得しています。

  var
   IdMsg: TIdMessage;
   s: String
  begin
   for c := 0 to FIMAPClnt.MessageList.Count - 1 do
    begin
     IdMsg := FIMAPClnt.MessageList[c];
     s :=  IdMsg.Subject;

ただし、メッセージの件名が別の言語 (ヘブライ語など) の場合、Windows の既定の言語がヘブライ語に設定されているコンピューターでも、メッセージの件名が正しく表示されません (添付の画像を参照)。

正しい Unicode 文字で言語を取得して、正しく機能するようにコードを修正するにはどうすればよいですか?

画面キャプチャ: ここに画像の説明を入力

ティア。

4

1 に答える 1

2

スクリーンショットの電子メール ヘッダーは、 RFC 2047 (「MIME パート 3: 非 ASCII テキストのメッセージ ヘッダー拡張」) に従ってエンコードされています。TIdIMAP4.UIDRetrieveAllEnvelopes()生データをキャプチャして保存し、自動的にデコードしません。ユニットのさまざまなDecode...()機能を使用してIdCoderHeaader.pas、ヘッダーを手動でデコードできます。

uses
  ..., IdCoderHeader;

var
  IdMsg: TIdMessage;
  s: String
begin
  ...
  for c := 0 to FIMAPClnt.MessageList.Count - 1 do
  begin
    IdMsg := FIMAPClnt.MessageList[c];
    IdMsg.Subject := DecodeHeader(IdMsg.Subject);
    DecodeAddresses(IdMsg.FromList);
    DecodeAddress(IdMsg.Sender);
    DecodeAddresses(IdMsg.ReplyTo);
    DecodeAddresses(IdMsg.Recipients);
    DecodeAddresses(IdMsg.CCList);
    DecodeAddresses(IdMsg.BccList);
    ...
  end;
  ...
end;
于 2013-05-05T02:45:24.820 に答える