![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Получаю тело сообщения функцией idMessage1.Body.Text. Если отправлено как текст, то все норм.
Но если в заголовках email содержатся строки Код:
Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Подскажите как 7bit-ное тело перевести в обычный текст. Или может существует другая функция получить тело из письма? |
#2
|
||||
|
||||
![]() Если не ошибаюсь, то указанные параметры (us-ascii и 7bit) это есть значения по-умолчанию, их наличие говорит промежуточным серверам что не нужно дополнительно что-то делать с тельным содержимым т.е. кодировка изначально уже чисто английская и семибитная (если был восьмой в наборчике, он обрезается при передаче). Смотрите спецификации стандарта RFC-1521
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Оказывается это сообщение состоит из нескольких частей. Если смотреть заголовки через почтовый клиент, то они будут такими:
Код:
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. |