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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.04.2009, 16:30
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка Отправка письма, проблемы с кодировкой (Delphi 2009, Indy 10)

Привет, у меня возникла банальная, но в то же время распространенная проблема, которая, как оказалась, не имеет универсального решения. Суть проблемы в том, что я перевел свой проект Global Mail Sender с D7 + Indy 10 на D2009 и у меня возникли проблемы с кодировкой, приходят кракозябры, от которых я избавился на D7 + Indy 10 с использованием следующего трюка:

Код:
procedure TForm1.IdMessageInitializeISO(var VHeaderEncoding: Char;
  var VCharSet: string);
begin
VCharSet                  := 'windows-1251';//
end;

но, видимо, Indy 10, встроенный в D2009 отличается значительнее, чем мне казалось, и теперь данный трюк не помогает, может кто знает как отправить письмо, чтобы его можно было нормально прочесть ?
Ответить с цитированием
  #2  
Старый 08.04.2009, 17:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вроде, в 2009 строки уже юникодные. Тогда:

1. Попробовать указать UTF-8, UTF-16 или Unicode.
2. Принудительно перекодировать строки в Ansi.
Ответить с цитированием
  #3  
Старый 08.04.2009, 18:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Некоторое время назад тоже бился с кодировкой под Indy, как оказалось в случае если имеется вложение к письму, то чихать хотел Indy на предустановки кодировки. Решения этой проблемы я так и ненашел.
А вот ваш вариант интересен, такого я непробовал.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 08.04.2009, 18:22
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Цитата:
Сообщение от lmikle
Вроде, в 2009 строки уже юникодные. Тогда:

1. Попробовать указать UTF-8, UTF-16 или Unicode.
2. Принудительно перекодировать строки в Ansi.


1. Пробовал, некатит
2. Тоже пробовал, опять же некатит, хотя побьсь еще над этим

Возможно, упустил какой-нибудь нюансик, но какой ?
Ответить с цитированием
  #5  
Старый 08.04.2009, 20:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Например тот, что String теперь - это Unicode-строка.
Надо, возможно, принудительно указывать тип AnsiString.
Ответить с цитированием
  #6  
Старый 08.04.2009, 20:52
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Цитата:
Сообщение от lmikle
Например тот, что String теперь - это Unicode-строка.
Надо, возможно, принудительно указывать тип AnsiString.

Ага, пасиб, все возможно, пересмотрю проект
Ответить с цитированием
  #7  
Старый 08.04.2009, 21:49
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Цитата:
Сообщение от lmikle
Например тот, что String теперь - это Unicode-строка.
Надо, возможно, принудительно указывать тип AnsiString.

Не помогло, Delphi "говорит" также что AnsiString это и есть String или наоборот. A вот разница м/у Pchar и PAnsiChar действительно здесь существунная.
Ответить с цитированием
  #8  
Старый 13.04.2009, 00:50
Saint Garry Saint Garry вне форума
Прохожий
 
Регистрация: 12.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

Доброго времени суток!
Сам морочился очень досго с подобной проблемой в Д2006
перерыл кучу информации и пришел к правильному решению:

Суть - нужно каждой части письма указывать в какой она кодировке должна быть.

пример :

Код:
//есть письмо 
IdMessageAvto : TidMessage;
//содержимое:
MessBody : TidText;
//вложение : 
Attach : TIdattachmentFile;
.......
// устанавливаем параметры письма

with IdMessageAvto do
  begin
    ContentType := 'multipart/mixed';
    CharSet := 'windows-1251';
.................
 end;

присоединяем содержимое :
MessBody := TIdText.Create(IdMessageAvto.MessageParts, nil);
  MessBody.ContentType := 'text/plain; CharSet = windows-1251'; 
// чарсет нужно указывать именно в свойстве контенттайп по другоу не канает (проверено)
  MessBody.Body.Text := ' message ';
Attach := TIdAttachmentFile.Create(IdMessageAvto.MessageParts,'D:\file.txt');
Ответить с цитированием
  #9  
Старый 13.04.2009, 12:56
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

К сожалению не помогло, 2009 Delphi от 2006 отличается значительно
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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