Od jakiegoś czasu pracuję nad aplikacją automatycznie wysyłającą wiadomości e-mail z załącznikami, wykorzystując do tego celu technologię Indy 10 pod Delphi 7. Zgodnie z poradnikiem na http://www.indyproject.org/sockets/blogs/rlebeau/2005_08_17_a.en.aspx oficjalnej stronie projektu, posłużyłem się poniższym kodem komponującym wiadomość składającą się z tekstu HTML i załączonego pliku:
with TIdText.Create(IdMessage1.MessageParts, nil) do begin
CharSet := 'windows-1250';
Body.LoadFromFile('html z treścią');
ContentType := 'text/html';
end;
with TIdAttachmentFile.Create(IdMessage1.MessageParts, 'tu załącznik') do begin
ContentType := 'application/pdf';
FileName := 'tu załącznik';
end;
IdMessage1.ContentType := 'multipart/mixed';
No i wiadomość dochodzi do adresata prawidłowo, zawiera treść z dokumentu źródłowego i załączony plik, ale nadal pojawiają się dwa problemy:
- Niezależnie jakie kodowanie nie ustawić w CharSet, wiadomość nigdy nie wyświetla polskich znaków. Próbowałem wpisać
windows-1250
,ISO-8859-2
,UTF-8
,cp1250
,default
czy co tam jeszcze ludzie zawsze proponują, ale za każdym razem polskie znaki były albo zastąpione losowymi niepolskimi literami (zwykle dużymi) albo w ogóle znikały. Co ciekawe, w normalnym e-mailu bez załączników i wykorzystującym tylko Body (bez MessageParts) wszystkie polskie znaki wyświetlają się bez problemu. - Skrzynka odbiorcza nie rozpoznaje nazwy ani typu załącznika (pomimo że są jasno w kodzie określone) i wyświetla go tylko jako
plik_0
. O dziwo podczas pobierania typ (pdf) jest rozpoznany, ale nazwa jest jakononame
, zaś na dysku jest po prostu zapisywano jak pliknoname
bez żadnego typu i trzeba go dopiero otworzyć w Acrobat Reader. O dziwo załączniki graficzne typuimage/png
są wyświetlane jakoplik_0.png
z miniaturką w ikonie, ale reszta dokładnie tak samo. (teżnoname
etc.)
Próbowałem wysyłać e-maile na dwa różne konta, na Onet Poczta i GMail, w obydwu przypadkach to samo. Szukałem czy może już ktoś na tym forum udzielił odpowiedź na tego typu problem ale jedyna rada jaką znalazłem to "Nie używać Indy", co w moim wypadku nie wchodzi w grę bo muszę akurat na tym pakiecie to zrobić...
`dodanie znaczników # i ``` - @furious programming