Оказывается это сообщение состоит из нескольких частей. Если смотреть заголовки через почтовый клиент, то они будут такими:
Код:
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;
...