Что нового
  • Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Delphi — проверка почты (Часть 3)

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,184
Баллы
155
  1. Сохранение вложенных файлов в папку
  2. Логирование обработанных сообщений
Предположим что в нас есть почтовый клиент, который должен проверять почту и сохранять все вложенные файлы в некую папку.
Приступим к реализации. Для того чтобы все работало, нам понадобится еще один компонент который находится на закладке Indy Misc под названием idMessage


Напишем процедуру для логирования принятых сообщений. Для простоты я буду выводить информацию о сообщениях в mmoResult (Memo в который пишется результат). Переходим в редактор кода и добавляем следующий код:
Код:
procedure TfrmMain.SaveToLog(idMessage: TidMessage);
begin
  mmoResult.Lines.Add(IdMessage1.UID); //Уникальный идентификатор сообщения, по нему можно разлечать новое письмо, или старое
  mmoResult.Lines.Add(IdMessage1.From.Text);
  mmoResult.Lines.Add(IdMessage1.Recipients.EmailAddresses);
  mmoResult.Lines.Add(IdMessage1.CCList.EMailAddresses);
  mmoResult.Lines.Add(IdMessage1.Subject);
  mmoResult.Lines.Add(FormatDateTime('dd mmm yyyy hh:mm:ss', IdMessage1.Date));
  mmoResult.Lines.Add(IdMessage1.ReceiptRecipient.Text);
  mmoResult.Lines.Add(IdMessage1.Organization);
end;
Добавляем объявление процедуры в секцию private класса главной формы:
Код:
private
  …
  procedure SetupSSL;
  procedure SaveToLog(idMessage: TidMessage);
publiс
Дальше переходим в процедуру проверки почты CheckMail(IP: TIdPOP3; User, Pass, Host: string; Port: Integer):String;
В коде ищем строчки вывода количества сообщений:
Код:
// Возвращаем результат
  Result:='Подключение прошло успешно!'+#13#10;
  Result:=Result+'У вас '+IntToStr(NumOfMsgs)+' сообщений';
  //Сюда добавим код провекрки вложенных файлов и сохранение на диск
end
except // Если произошла ошибка- возвращаем текст ошибки
  on E:Exception do Result:='Ошибка подключения! '+E.Message;
end;
И дописываем код который будет получать информацию о сообщении и сохранять вложенный файлы в папку.
Код:
...
Result := Result+'У вас '+IntToStr(NumOfMsgs)+' сообщений';
//Цикл по всем письмам
for I := 1 to NumOfMsgs do
begin
  if not IP.Retrieve(I, IdMessage1) then
  begin
    //записать в гол что не удалось получить сообщение с ID = I
    Exit;
  end;
//сохранение результатов в лог по каждому письму отдельно
SaveToLog(IdMessage1);
for J := 0 to IdMessage1.MessageParts.Count - 1 do
  if IdMessage1.MessageParts[J].PartType = mptAttachment then
  begin
    //Создаем папку формат .\Attach\2013.04.09\UID сообщения
    AttachPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))+'Attach\'+FormatDateTime('yyyy.mm.dd', IdMessage1.Date)+'\'+IdMessage1.UID);
    ForceDirectories(AttachPath);
    //Сохранение файла
    (IdMessage1.MessageParts[J] as TidAttachmentFile).SaveToFile(AttachPath + IdMessage1.MessageParts[J].FileName);
  end;
end;
Для того чтобы все это заработало обязательно нужно в раздел uses добавить модули:
Код:
uses
   ... idMessageParts, IdAttachmentFile
 

SsSsSr

Registred
Новичок
Регистрация
23 Сен 2015
Сообщения
11
Баллы
30
Возраст
38
не работает у всех? кто сделал норм?
 

SsSsSr

Registred
Новичок
Регистрация
23 Сен 2015
Сообщения
11
Баллы
30
Возраст
38
ssl библиотеки могут отличаться?
 

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,058
Баллы
155
Возраст
46
Да могут к примеру indy 9 и 10, что ищё?
 
Вверх