|
Вопрос # 4 522/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Работал на Delphi 7 сейчас перешел на delphi 2010.
Пишу почтовый клиент - на семерке работал прекрасно но на 10 сплошные разочарования - причем с кодировкой текста.
Код стандартный -прием
IdSmtp1.Host:= 'smtp.mail.ru';
IdSmtp1.Port := 25;
idSmtp1.Username := '';
idSmtp1.Password := '';
IdMessage1.ContentType:='text/plain'; // Письмо в текстовом виде
idMessage1.Body.Text := Memo1.Text;
idMessage1.From.Text :='';
idMessage1.Recipients.EMailAddresses := '';
idMessage1.Subject := 'Тест';
idSmtp1.Connect;
if idSmtp1.Connected = TRUE then
idSmtp1.Send(idMessage1);
idSmtp1.Disconnect();
В этом коде получилось исправить крокозябры приходящие в почтовый ящик вот так:
IdMessage1.CharSet := 'UTF-8';
IdMessage1.ContentTransferEncoding := '8bit';
Но прием почты
var
mailcicl,i:integer; // счётчик получаемых писем
addr:string; // папка в которой будут сохраняться получаемые письма
begin
POP3.Host:='pop.mail.ru'; // адрес почтового сервера
POP3.Port:=110; // порт по которому будет осуществляться подключение
POP3.Username:=''; // Логин пользователя
POP3.Password:='; // пароль пользователя
addr:=ExtractFilePath(Application.ExeName); // получения адреса папки, в которой находиться наша программа
POP3.Connect; // подключение к серверу
Memo1.Clear; // очистка компонента memo для отображения текста письма.
IdMessage.Clear; // очистка буфера для сообщения
for mailcicl := 1 to 10 do
begin
POP3.Retrieve(1,IdMessage); // получение одного сообщения
Memo1.Lines.AddStrings(IdMessage.Body);
POP3.Delete(mailcicl);
if POP3.CheckMessages<1 then Break;
end;
POP3.Disconnect; // разрыв соединения с сервером
уже бьюсь всю неделю весь интернет излазил - ни чего хотя подобных вопросов без ответов полно.Так вот в свою программу получаю письма в виде Daciauaiiia niiauaiea:
***************
iinoaauoa eiae?iaeo
ПÑ?ивет И все началось с приходом indi 10
 |
Вопрос задал: igoriy (статус: Посетитель)
Вопрос отправлен: 21 августа 2010, 16:38
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 21 августа 2010, 18:54; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 21 августа 2010, 17:46 [#1]:
Потому что юникод. Это ответ на все ваши страдания. В 2010 используется только он. Что ожидает идни - одной ей известно, но скорее всего старый Ansi.
и вот эти строки
IdMessage1.CharSet := 'UTF-8';
IdMessage1.ContentTransferEncoding := '8bit';
подтверждают это.
А вот прием почты - это всегда проблема с кодировкой. Нужно знать, в какой кодировке она приходит и правильно подставить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
igoriy (статус: Посетитель), 21 августа 2010, 18:08 [#2]:
Но в Delphi 7 как то это определялось?Так как специально ничего не дополнял и все письма получал в нормальной кодировке
|
|
Вадим К (статус: Академик), 21 августа 2010, 18:54 [#3]:
Все? не думаю.
Попробуйте начать с того, что бы применять вместо String тип AnsiString - это строка "старого" образца, может и поможет.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|