Indy i problem z polskimi znakami w wiadomościach.

0

Witam,

Mam problem z wysyłaniem wiadomości z polskimi znakami przy wykorzystaniu komponentów TisMessage oraz TidSMTP. Wersja Indy 10.2.5, Delphi 2009, a system Vista HP. Przekopałem wszystkie fora i rozwiązanie, które są tam podawane nic nie dają. Ustawianie kodowania na ISO-8859-2 czy windows-1250 niczego nie zmienia, podstawiane są znaki ! ? | zamiast polskich znaków. Konwertowanie tekstu na ISO również nic nie daje. Doszedłem do tego, że tekst generowany przez Delphi jest w unicode, a polskie znaki znajdują się w tablicy poza adresem $FF. Jeśli nie przeprowadzę konwersji na ISO to tekst jest ok, ale znaki są bez ogonków i kropek. Poniżej podaję kod, który używam oraz nagłówek wiadomości jaki jest generowany. Może mi ktoś coś podpowie, bo już mi ręce opadają...

SMTP.Username := '[email protected]';
SMTP.Password := 'password';
SMTP.Host := 'mail.domena.com';
SMTP.Port := 587;
SMTP.AuthType := satDefault;
try
SMTP.Connect;
finally
Begin
MessageSend := TIdMessage.Create(SMTP);
try
MessageSend.ContentType := 'text/plain; charset=ISO-8859-2';
MessageSend.CharSet := 'ISO-8859-2';
MessageSend.Encoding := meMIME;
MessageSend.ContentTransferEncoding := '8bit';

    LM.Data:=MessageSend;                                                         // to dodatkowe wywołanie jest czy go nie ma 
    LM.Code:[email protected];                            //  niczego nie mienia
    MessageSend.OnInitializeISO           := TIdInitializeISOEvent(LM); //

    MessageSend.GenerateHeader;                                                // bez tego generowania też nic się nie zmienia
    MessageSend.From.Name                 := 'Nadawca';
    MessageSend.From.Address              := '[email protected]';
    MessageSend.Recipients.EMailAddresses := '[email protected]';
    MessageSend.Subject                   := 'Temat wiadomości';
    MessageSend.Body.Append('Przypominamy o przeglądzie urządzenia:'); // Dodaję tekst z bazy danych

// Po ustaleniu całości tekstu przeprowadzam ewentualną konwersję na ISO lub win

    SMTP.Send(MessageSend);
   .....

W OnInitializeISO mam jeszcze

VCharSet:='ISO-8859-2'; // lub 'windows-1250'

Nagłówek wiadomości wygląda tak:

Received: from mx.poczta.onet.pl (unresolved [10.174.34.83]:37647)
by ps8.m5r2.onet (Ota) with LMTP id 4F2EB2DCAE93B
for [email protected]; Mon, 12 Nov 2012 0908 +0100 (CET)
Received: from s8.hekko.net.pl (s8a.hekko.net.pl [188.116.35.24])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx.poczta.onet.pl (Onet) with ESMTPS id 400BCC0000071
for [email protected]; Mon, 12 Nov 2012 0957 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=domena.com; s=x;
h=Date:Content-Transfer-Encoding:MIME-Version:Content-TypeSubject:From; bh=yD07Jo7Bg6ZCWynhdc9jlKP+Ok/gVJVU0Z0TXAWmK8Q=;
b=QVngKNE2EnoANZpimeRAxY5/oOALkNdB9gUhdDit8a6j66Tpr57R3S41MsGtDdJ9oRBebmH6IdxbSipeBCOuGGhIsRJz8Hc8qBk0m2ssxbL1xiIY0S0oTOFnBIRBgqPS;
Received: from static-78-9-71-215.ssp.dialog.net.pl ([78.9.71.215] helo=sigma-2)
by s8.hekko.net.pl with esmtpa (Exim 4.80.1)
(envelope-from [email protected])
id 1TXoxv-0004VS-7F
for [email protected]; Mon, 12 Nov 2012 0956 +0100
From: "Nadawca" [email protected]
Subject: Przypomnienie o przegladzie urzadzenia
To: [email protected]
Content-Type: text/plain; charset="ISO-8859-2"
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Date: Mon, 12 Nov 2012 0924 +0100
X-HEKKO: 78.9.71.215:[email protected]
X-ONET_PL-MDA-Version: 1.0.25
X-ONET_PL-MDA-Info: 008 11440 4F2EB2DCAE93B 0.500767
X-ONET_PL-MDA-From: [email protected]
X-ONET_PL-MDA-Spam: NO
X-Antivirus: AVG for E-mail 2012.0.2221 [2441/5388]
X-AVG-ID: ID4CD938AC-136A1C65

Przypominamy o przegladzie urzadzenia:


Dodam, że wysyłałem z i na adresy różnych providerów, to nic nie zmienia. Z tego co zauważyłem to w nagłów w sekcji Subject powinno być: =?iso-8859-2?Q? ale ni jak nie ładuje się do nagłówka. Zdarzenie on InitializeISO jest wywoływane przy generowaniu nagłówka jak i body wiadomości. Co ciekawe, antywirus dokleja mi na końcu wiadomości informację o sprawdzeniu i tam polskie znaki są wyświetlane o.k. Ewidentnie wskazuje to na to, że przy wysyłaniu Indy przy polskich znakach wstawia zamiast polskich znaków coś z tablicy jakby źle przeadresował.

Pozdrawiam
Krzysztof

0

Jeżeli podajesz:
MessageSend.ContentType := 'text/plain; charset=ISO-8859-2';
to w tym miejscu masz zastosować ten ISO-8859-2:
MessageSend.Body.Append('Przypominamy o przeglądzie urządzenia:');

0

przecież wyraźnie jest wyżej, że stosuję, ale to nie daje efektu... w tym problem

1 użytkowników online, w tym zalogowanych: 0, gości: 1