Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IdPOP3, Как с ним работать? помогите разобраться 
:(
    Опции темы
Dimyan
Дата 3.3.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 441
Регистрация: 12.1.2004
Где: Новосибирск

Репутация: нет
Всего: 4



Помогите разобратся пожалуйста
почитал я про этот IdPOP3 нифига понять путем не могу
попробывал сделать функцию она говорит что не может сохранить приатаченный файл
Код

 IdPOP31.Connect(50000);
 for i:=1 to IdPOP31.CheckMessages do
 begin
   if IdPOP31.Retrieve(i, IdMessage1) then
   begin
     TIdAttachment(IdMessage1.MessageParts.Items[i]).SaveToFile(
     TIdAttachment(IdMessage1.MessageParts.Items[i]).FileName);
     TIdAttachment.Create(IdMessage1.MessageParts, TIdAttachment(IdMessage1.MessageParts.Items[i]).FileName);
   end;
 end;

Мне нужно получить файл с почты, сохранить его в установленное место и вытащить из него приаттаченный файл, точнее даже сообщение сохронять не обязательно, главное сохранить приаттаченый файл


--------------------
Как хорошо ничего не делать, а потом еще немного отдохнуть :)
PM MAIL ICQ   Вверх
_hunter
Дата 3.3.2005, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



перед использованием объекта его создать неплохо бы ;)
а у тебя создание в конце идет + указатель теряется


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 3.3.2005, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Нужно брать Items не от i, а от 0 до TIdMessageParts.AttachmentCount-1
PM MAIL   Вверх
Dimyan
Дата 4.3.2005, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 441
Регистрация: 12.1.2004
Где: Новосибирск

Репутация: нет
Всего: 4



Все равно что то не получается smile(
Код

procedure TMainForm.ReceiveMail();
var
 i, MesCnt :Integer;
 Attach :TIdAttachment;
begin
try
MessageBase.Clear;

 ReceiveBase.Connect(50000);
 if ReceiveBase.Connected then
 begin
   MesCnt := ReceiveBase.CheckMessages;
   while MesCnt > 0 do
   begin
     if ReceiveBase.Retrieve(MesCnt, MessageBase) then
     begin
       for i:=0 to MessageBase.MessageParts.Count do
       begin
         if MessageBase.MessageParts.Items[i].ClassType = TIdAttachment then
         begin
           Attach := MessageBase.MessageParts.Items[i] as TIdAttachment;
           Attach.SaveToFile(Attach.FileName);
         end;
       end;
     end;
     dec(MesCnt);
   end;
  end;
finally
 if ReceiveBase.Connected then ReceiveBase.Disconnect;
 Attach.Free;
end;
end;


где: MessageBase - TIdMessage
ReceiveBase - TIdPOP3

Пишет что ошибка сохранения аттача smile(
Подскажте плиз где ошибка, уже второй день с этим РОР3 бьюсь, нифига не выходит smile(


--------------------
Как хорошо ничего не делать, а потом еще немного отдохнуть :)
PM MAIL ICQ   Вверх
Snowy
Дата 4.3.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Вот накатал пример. В Uses нужно добавить IdPOP3 и IdMessage.
В остальном функция самодостаточна.
Для сохранения рекомендую добавить каталог к FileName.
Код

procedure ReseiveMail(Host: string; Port: integer; User, Password: string);
var
 pop: TIdPOP3;
 m:   TIdMessage;
 mc,i: integer;
begin
 pop:=TIdPOP3.Create(nil);
 pop.Host:=Host; pop.Port:=Port;
 pop.Username:=User; pop.Password:=Password;
 try
   pop.Connect(60000);
   mc:=pop.CheckMessages;
   while mc>0 do begin
     m:=TIdMessage.Create(pop);
     pop.Retrieve(mc,m);
     for i:=0 to m.MessageParts.Count-1 do
       with m.MessageParts do
         if items[i].ClassType=TIdAttachment then
           with TIdAttachment(items[i]) do
             try
               if FileExists(FileName) then DeleteFile(FileName);
               SaveToFile(FileName);
             except
               ShowMessage('Не удается сохранить файл');
             end;
     m.Free; dec(mc);
   end;
   ShowMessage('Все в порядке');
 except
   ShowMessage('Не удалось подключиться к серверу');
 end;
 pop.Free;
end;

PM MAIL   Вверх
Dimyan
Дата 4.3.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 441
Регистрация: 12.1.2004
Где: Новосибирск

Репутация: нет
Всего: 4



Почему то вот не начинается выполнение цикла smile
Код

for i:=0 to m.MessageParts.Count-1 do

хотя почта на ящике есть и вся она с одним приаттаченым файлом
говорит что m.MessageParts.Count = 1, ну и соответственно при m.MessageParts.Count-1 получается 0 и цикл перестает крутиться smile


--------------------
Как хорошо ничего не делать, а потом еще немного отдохнуть :)
PM MAIL ICQ   Вверх
Snowy
Дата 4.3.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Сейчас проверил. Код рабочий. Аттач складывается в папочку.
Попробуй указать полный путь, куда сохранять файл.

Цитата(Dimyan @ 4.3.2005, 12:12)
m.MessageParts.Count = 1, ну и соответственно при m.MessageParts.Count-1 получается 0

Все правильно - крутим от 0 до 0 = 1 раз.
Можно крутить от -255 до -255 = 1 раз.
Пусть 0 не пугает. Тут все нормально.
PM MAIL   Вверх
Dimyan
Дата 4.3.2005, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 441
Регистрация: 12.1.2004
Где: Новосибирск

Репутация: нет
Всего: 4



Я вот так указал и ноль эффекта
Код

if FileExists('C:\'+ FileName) then DeleteFile('C:\'+ FileName);
SaveToFile('C:\'+ FileName);


точнее я проверил несколько раз, и почему то он не входит в цикл smile(
более того я попробывал закоментировать цикл и поставить вместо i ноль (просто для проверки)
и как оказалось что
Код

if items[0].ClassType=TIdAttachment then
           with TIdAttachment(items[0]) do
             try
               if FileExists('C:\'+ FileName) then DeleteFile('C:\'+ FileName);
               SaveToFile('C:\'+ FileName);
             except
               ShowMessage('Не удается сохранить файл');
             end;

тоже проскакивает smile как будто items[0].ClassType не равно TIdAttachment
Добавлено @ 12:55
вот блин а теперь все получилось
чет я намудрил короче

Snowy, спасибо все работает
Добавлено @ 12:55
вот блин а теперь все получилось
чет я намудрил короче

Snowy, спасибо все работает
Добавлено @ 12:58
Snowy, подскажи еще если не сложно, а как теперь можно узанать адрес от кого пришло сообщение?


--------------------
Как хорошо ничего не делать, а потом еще немного отдохнуть :)
PM MAIL ICQ   Вверх
Snowy
Дата 4.3.2005, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



m.From.Name - имя
m.From. Address - адрес
m.From.Text - имя и адрес вместе
Добавлено @ 13:35
Все string;
И еще добавь перед m.Free строчку
pop.Delete(mc);
Чтобы удалять сообщения из ящика.

PM MAIL   Вверх
Dimyan
Дата 4.3.2005, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 441
Регистрация: 12.1.2004
Где: Новосибирск

Репутация: нет
Всего: 4



А еще такой вопрос:
Как можно сохранить аттачмент со своим именем файла?


--------------------
Как хорошо ничего не делать, а потом еще немного отдохнуть :)
PM MAIL ICQ   Вверх
Snowy
Дата 4.3.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



C каким своим?
Ты же ручками пишешь:
SaveToFile('C:\'+FileName);
C каким именем хочешь, с таким и сохраняй.
Что ты имеешь ввиду под "своим именем файла"?
PM MAIL   Вверх
Dimyan
Дата 4.3.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 441
Регистрация: 12.1.2004
Где: Новосибирск

Репутация: нет
Всего: 4



Snowy, я это и имел в виду, все уже чтото заработался домой пора, а то глюки начинаются smile(


--------------------
Как хорошо ничего не делать, а потом еще немного отдохнуть :)
PM MAIL ICQ   Вверх
TP@MB@Y
Дата 16.6.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



Хм. А если в письме два вложенных файла? Первый сохраняется нормально, а вот как дело доходит до второго - ошибка!
Как в этой ситуации действовать?
PM   Вверх
Snowy
Дата 17.6.2005, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(TP @ 16.6.2005, 22:47)
А если в письме два вложенных файла?

Да хоть десять.
Приведенный пример перебирает все части письма и складывает все аттачи в папку.
Точно помню, что проверял.
Даже, если вдруг имена совпадут (что маловероятно).
Попробуй запусть не в дельфи, а сам ехешник.
PM MAIL   Вверх
TP@MB@Y
Дата 18.6.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



Snowy
Странно... без дельфей все работает нормально smile

Тока я заметил интересную вещь: скаченый файл увеличивается на 2 байта! Скорее всего это символы 10 и 13
Почему? И как это предотвратить?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1253 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.