![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |