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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.10.2014, 05:57
ivankom ivankom вне форума
Прохожий
 
Регистрация: 04.02.2014
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию Кодировка тела email сообщения

Получаю тело сообщения функцией idMessage1.Body.Text. Если отправлено как текст, то все норм.
Но если в заголовках email содержатся строки
Код:
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
то idMessage1.Body.Text выдает пустую строку. При этом если сохранять в файл (idMessage1.SaveToFile), то тело в файле как текст.
Подскажите как 7bit-ное тело перевести в обычный текст. Или может существует другая функция получить тело из письма?
Ответить с цитированием
  #2  
Старый 23.10.2014, 02:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Если не ошибаюсь, то указанные параметры (us-ascii и 7bit) это есть значения по-умолчанию, их наличие говорит промежуточным серверам что не нужно дополнительно что-то делать с тельным содержимым т.е. кодировка изначально уже чисто английская и семибитная (если был восьмой в наборчике, он обрезается при передаче). Смотрите спецификации стандарта RFC-1521
Ответить с цитированием
  #3  
Старый 27.10.2014, 14:10
ivankom ivankom вне форума
Прохожий
 
Регистрация: 04.02.2014
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Оказывается это сообщение состоит из нескольких частей. Если смотреть заголовки через почтовый клиент, то они будут такими:
Код:
Content-Type: multipart/mixed;
    boundary="----=_Part_2_161819575.1413783727126"

А то, что я писал выше, это выдавал мне делфи, функцией idMessage1.SaveToFile

Вот, нашел как прочитать сообщение в котором только одна часть.

Код:
Memo1.Lines:= (IdMessage1.MessageParts.Items[0] as TIdText).Body;

Подскажите как правильно написать условие для проверки Content-Type
У меня почему-то срабатывает и до else и после

Код:
begin
  if not idIMAP41.Connected then
  begin
    AddToLog(' Невозможно подключиться к почтовому серверу. Попытка подключения... Error ' + IntToStr(GetLastError));
    IdIMAP41.Host := IniConf.ReadString('mail','host','');
    IdIMAP41.Port := IniConf.ReadInteger('mail','port',993);
    IdIMAP41.Username := IniConf.ReadString('mail','username','');
    IdIMAP41.Password := IniConf.ReadString('mail','password','');
    IdIMAP41.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdIMAP41);
    IdIMAP41.UseTLS := utUseImplicitTLS;
    idIMAP41.Connect;
    if idIMAP41.Connected then
    AddToLog(' Содинение с почтовым сервером!');
  end;

    IdIMAP41.SelectMailBox('INBOX');
     for i := IdIMAP41.MailBox.TotalMsgs downto 1 do
    begin
    idIMAP41.Retrieve(i, idMessage1);
    begin
      begin
      if idMessage1.ContentType = 'multipart/mixed' then
      begin
       tstr := (IdMessage1.MessageParts.Items[0] as TIdText).Body;
       mailbody := tstr.Text;
      end
     else
       mailbody := idMessage1.Body.Text;  //получаем тело сообщения
     end;
      address := idMessage1.From.Address; //получаем адрес отправителя
      subj := idMessage1.Subject;
      rcpt := idMessage1.Recipients.EMailAddresses;
     ...

Последний раз редактировалось M.A.D.M.A.N., 27.10.2014 в 21:02.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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