Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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. Сколько код не долбил и читал описание получения нормально нигде не описано с серверами хоть как то понятно. Еще раз спасиб. |