Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 11:33   #1
malor
Форумчанин
 
Регистрация: 23.05.2007
Сообщений: 151
Вопрос Создание письма: unicode-тело будет отображено вопросительными знаками.

Код:
    IdSMTP1.Host := Host_Server_SMTP;
    IdSMTP1.Port := Port_Server_SMTP;
    IdSMTP1.Username := SenderUserName;
    IdSMTP1.Password := SenderPassword;
    IdMessage1.From.Address := SenderAddress;
    IdMessage1.From.Name := 'Отчет за неделю';
    IdMessage1.Subject := ExtractFileName(FileNameAttach);
    IdMessage1.Body.Text := 'Здравствуйте. ';
    IdMessage1.ContentType := 'text/plain; charset=UTF-16';

    IdMessage1.Recipients.Add;
    IdMessage1.Recipients.Items[0].Text := RecipientAddress;
    TIdAttachmentFile.Create(IdMessage1.MessageParts, FileNameAttach);
Со строчкой
IdMessage1.ContentType := 'text/plain; charset=UTF-16';
слова
Отчет за неделю
превращаются в иероглифы. А цель - чтоб IdMessage1.Body.Text выглядело кириллицей.

Как сделать, чтоб тело письма по-русски?

Цитата:
CharSet is a String property that indicates the character set expected in message contents. CharSet can contains one of the official names for character sets as identified in IdCharsetNames.
Character set information may also be supplied as an argument in the content type for individual items in the MessageParts collection. The value in CharSet will be updated using
the content type argument value when message properties are read in ProcessHeaders.

Declaration
property MessageParts: TIdMessageParts;
Summary
List of message parts for the message.
Description
MessageParts is a TIdMessagePartsList used to store the TIdMessagePart components that make up the message. MessageParts can contain two TIdMessagePart descendants:
TIdText and TIdAttachment.
MessageParts is used when IsEncoded is set to True (on sending), or NoDecode is set to false for receiving.
Delphi XE

Переношу в раздел "Работа с сетью" !

Последний раз редактировалось mihali4; 24.11.2011 в 23:01.
malor вне форума Ответить с цитированием
Старый 24.11.2011, 13:27   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Попробуй так
Код:
IdMessage1.Body.Text := ShortString('Здравствуйте. ');
или
IdMessage1.Body.Text := AnsiString('Здравствуйте. ');
FaTaL вне форума Ответить с цитированием
Старый 24.11.2011, 13:37   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
IdMessage1.ContentType := 'text/plain; charset=UTF-16';
заменить на:
Код:
IdMessage1.ContentType := 'text/plain; charset=UTF-8';
Затем:
Код:
IdMessage1.Body.Text := AnsiToUtf8('Здравствуйте. ');
Для возврата из Utf-8 есть функция Uft8ToAnsi(). Ну или от индей юзайте UTF8Encode, UTF8Decode

Юникод используйте только при условии, что smtp-сервер умеет декодировать utf8 в читбельный вид.
Человек_Борща вне форума Ответить с цитированием
Старый 24.11.2011, 13:52   #4
malor
Форумчанин
 
Регистрация: 23.05.2007
Сообщений: 151
Вопрос

Но ведь строка 'Здравствуйте. ' - это UTF-16. Разве нет?

А здесь :
IdMessage1.Body.Text := AnsiToUtf8('Здравствуйте. ');
слово `Ansi` предполагает, что функции на вход поступает строка в ANSI-кодировке.
malor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив чисел с разными знаками. GoldSieg Паскаль, Turbo Pascal, PascalABC.NET 8 22.10.2011 16:40
Работа с подстановочными знаками donitz Microsoft Office Word 2 30.08.2011 06:44
Ваше сообщение не будет отображено до тех пор, пока модератор не проверит его. GoodDA О форуме и сайтах клуба 5 24.08.2010 01:24