| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > IdPOP3, Как с ним работать? |
| Автор: Dimyan 3.3.2005, 15:09 | ||
| Помогите разобратся пожалуйста почитал я про этот IdPOP3 нифига понять путем не могу попробывал сделать функцию она говорит что не может сохранить приатаченный файл
Мне нужно получить файл с почты, сохранить его в установленное место и вытащить из него приаттаченный файл, точнее даже сообщение сохронять не обязательно, главное сохранить приаттаченый файл |
| Автор: _hunter 3.3.2005, 15:37 |
| перед использованием объекта его создать неплохо бы ;) а у тебя создание в конце идет + указатель теряется |
| Автор: Snowy 3.3.2005, 15:44 |
| Нужно брать Items не от i, а от 0 до TIdMessageParts.AttachmentCount-1 |
| Автор: Dimyan 4.3.2005, 08:16 | ||
Все равно что то не получается
где: MessageBase - TIdMessage ReceiveBase - TIdPOP3 Пишет что ошибка сохранения аттача Подскажте плиз где ошибка, уже второй день с этим РОР3 бьюсь, нифига не выходит |
| Автор: Snowy 4.3.2005, 10:55 | ||
| Вот накатал пример. В Uses нужно добавить IdPOP3 и IdMessage. В остальном функция самодостаточна. Для сохранения рекомендую добавить каталог к FileName.
|
| Автор: Dimyan 4.3.2005, 12:12 | ||
Почему то вот не начинается выполнение цикла
хотя почта на ящике есть и вся она с одним приаттаченым файлом говорит что m.MessageParts.Count = 1, ну и соответственно при m.MessageParts.Count-1 получается 0 и цикл перестает крутиться |
| Автор: Snowy 4.3.2005, 12:18 | ||
| Сейчас проверил. Код рабочий. Аттач складывается в папочку. Попробуй указать полный путь, куда сохранять файл.
Все правильно - крутим от 0 до 0 = 1 раз. Можно крутить от -255 до -255 = 1 раз. Пусть 0 не пугает. Тут все нормально. |
| Автор: Dimyan 4.3.2005, 12:50 | ||||
Я вот так указал и ноль эффекта
точнее я проверил несколько раз, и почему то он не входит в цикл более того я попробывал закоментировать цикл и поставить вместо i ноль (просто для проверки) и как оказалось что
тоже проскакивает Добавлено @ 12:55 вот блин а теперь все получилось чет я намудрил короче Snowy, спасибо все работает Добавлено @ 12:55 вот блин а теперь все получилось чет я намудрил короче Snowy, спасибо все работает Добавлено @ 12:58 Snowy, подскажи еще если не сложно, а как теперь можно узанать адрес от кого пришло сообщение? |
| Автор: Snowy 4.3.2005, 13:33 |
| m.From.Name - имя m.From. Address - адрес m.From.Text - имя и адрес вместе Добавлено @ 13:35 Все string; И еще добавь перед m.Free строчку pop.Delete(mc); Чтобы удалять сообщения из ящика. |
| Автор: Dimyan 4.3.2005, 14:12 |
| А еще такой вопрос: Как можно сохранить аттачмент со своим именем файла? |
| Автор: Snowy 4.3.2005, 14:16 |
| C каким своим? Ты же ручками пишешь: SaveToFile('C:\'+FileName); C каким именем хочешь, с таким и сохраняй. Что ты имеешь ввиду под "своим именем файла"? |
| Автор: Dimyan 4.3.2005, 14:36 |
| Snowy, я это и имел в виду, все уже чтото заработался домой пора, а то глюки начинаются |
| Автор: TP@MB@Y 16.6.2005, 22:47 |
| Хм. А если в письме два вложенных файла? Первый сохраняется нормально, а вот как дело доходит до второго - ошибка! Как в этой ситуации действовать? |
| Автор: Snowy 17.6.2005, 09:32 | ||
Да хоть десять. Приведенный пример перебирает все части письма и складывает все аттачи в папку. Точно помню, что проверял. Даже, если вдруг имена совпадут (что маловероятно). Попробуй запусть не в дельфи, а сам ехешник. |
| Автор: TP@MB@Y 18.6.2005, 20:08 |
| Snowy Странно... без дельфей все работает нормально Тока я заметил интересную вещь: скаченый файл увеличивается на 2 байта! Скорее всего это символы 10 и 13 Почему? И как это предотвратить? |
| Автор: Snowy 20.6.2005, 09:46 | ||||
Ничего странного. Конструкции try ... except так себя и ведут при включенном отладчике.
Что-то не замечал. Проверял с архивами - вполне работоспособны после сохранения. На размер не смотрел... Сомневаюсь, что что-то не так, но проверить сейчас нет возможности. Если все же так, то дело не в этом коде, а в реализации TIdAttachment. Попробуй сравнить исходный файл и принятый при помощи консольной комманды: fc /b file1.ext file2.ext |
| Автор: TP@MB@Y 20.6.2005, 23:10 |
| А вообще письмо может не отправиться? Т.е. допустим коннект установлен, все поля заполнены, но по какой то внешней причине send() не срабатывает. Как узнать, чтобы переслать письмо? |
| Автор: Snowy 21.6.2005, 09:17 | ||||||
Письмо может не отправиться из-за плохой связи, либо, если сервер не остроили условия или он требует аутентификацию. Вообще-то топик про IdPOP3.
По-моему так:
|
| Автор: TP@MB@Y 24.6.2005, 01:02 |
| Snowy Ясно. Сорри, за оффтоп, но как сделать чтобы отправленое письмо было в кодировке windows-1251 ? |
| Автор: Snowy 24.6.2005, 09:54 | ||
Нужно прописать ее в TIdMessage.ContentTransferEncoding Но это свойство не перекодирует само письмо, а только указывает какая кодировка. Ты сам должен заполнять текст письма в нужной кодировке. В заголовке она только конкретизируется для почтового клиента, чтобы ему не приходилось догадываться. Если исходный текст у тебя в другой кодировке - читай FAQ по кодировкам. P.S. и на будущее - если у тебя возник другой вопрос - создай для него отдельный топик. А то придет злой модератор и будет громко ругаться. Да и шансов получить ответ будет больше. |
| Автор: Alex 30.6.2005, 10:13 | ||
Будет! Модератор: Пожалуйста, один топик - один вопрос. Тема закрыта. |
| Автор: mrVerus 10.3.2009, 07:39 |
| Парни помогите очень нужно получить письмо и сожранить его с аттачментом в файл *.eml не изменяя структуры оставить для других клиентских программ не дешифруя а просто сохронить. Зарание спасибо!!! |
| Автор: Matematik 10.3.2009, 20:31 | ||
| mrVerus, > получить письмо и сожранить его с аттачментом в файл *.eml не изменяя структуры Пример соединения с POP3 есть вверху. Вместо Retrieve() пользуй RetrieveRaw(), метод получает письмо, ничего в нем не меняя, и сохраняет его в TStringList, который можно далее сохранить в файл
|
| Автор: mrVerus 11.3.2009, 14:04 |
| Спасибо тебе Matematik огромное. Я пишу почтовый сервер для лакалки с пересылкой на внешний почтовый ящик на номпонентах idSMTPServer,idPOP3Server,idPOP3 и idSMTP. Сколько код не долбил и читал описание получения нормально нигде не описано с серверами хоть как то понятно. Еще раз спасиб. |