Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > Получение почты |
Автор: Pakshin A. S. 20.2.2006, 23:20 |
Итак, на почтовый ящик в инете поступило n штук писем с вложенными файлами. Вот эти письма я должен получить поочередно из программы; получить текст письма, сохранить на жестком диске вложенный файл под определенным именем, получить адрес отправителя и время получения письма на сервер. Как это реализуется? Киньте ссылки на исходники таких функций (получение нужной информации, описанной выше)... Заранее огромное Спасибо! ![]() |
Автор: Snowy 20.2.2006, 23:29 |
http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=8b4abec28e3f951ca951ed6b895928d6&search_in=posts&result_type=topics&flag=search&debug=&highlite=tidpop3&skipped= Добавлено @ 23:31 Вот прямой линк на код: http://forum.vingrad.ru/index.php?showtopic=44287&view=findpost&p=342291 |
Автор: Pakshin A. S. 20.2.2006, 23:41 |
Спасибо, буду разбираться, хотя с первого взгляда все очень просто... ![]() |
Автор: Pakshin A. S. 21.2.2006, 22:32 |
Я все-таки что-то не понял... Все прекрасно работает, кроме получения самого текста письма... ![]() P. S. Использую код Snowy из http://forum.vingrad.ru/index.php?showtopi...st&p=342291 |
Автор: Snowy 21.2.2006, 23:20 | ||
Вот. Чуть добавил:
|
Автор: Pakshin A. S. 21.2.2006, 23:38 |
Так... чет не пашеть... m.MessageParts.Count у меня тождественный 0 всегда, хотя письма почтовики берут... |
Автор: Snowy 22.2.2006, 00:00 |
Ты ж только что писал, что все работает. При Count=0 вообще ничего не будет работать. Я не проверял - лень сервер поднимать для теста. Нужно оттрейсить и посмотреть, куда идет и что идет. Еще полный текст можно получить m.Body - string. Но там будет полный текст, включая файлы. Кроме того. HTML текст не считается текстом - это приаттаченный html файл. Текстом считается только plain-text. Так что проблема может быть и в этом. |
Автор: Pakshin A. S. 22.2.2006, 18:45 | ||
РАботало с самодельными письмами, отправленными самому себе... ьеперь письма отправлются через формочку в интернете. Outlook Express, к примеру, все прекрасно читает, а вот прога не видит ни приаттаченного файла, ни самого текста письма, хотя в m.Body есть полная информация, как я понимаю и по файлу и по самому письму:
Может стоит извлечь отдельно все эти большие закодированные части, раскодировать их, а потом попробовать вывести само письмо и попробовать каким-то образом сохранить приаттаченный файл.... Или все-таки есть выход более культурный? |
Автор: Pakshin A. S. 22.2.2006, 19:03 |
Фокус не удался... Два кода из DRKB выдают пустоту... ![]() |
Автор: Snowy 22.2.2006, 19:13 | ||||
Вот этот код с полным протоколированием:
Пример работы у меня:
Все корректно показывает. Файл корректно сохраняет. Добавлено @ 19:17 В Indy есть перекодировщики. |
Автор: Pakshin A. S. 22.2.2006, 19:17 |
![]() Может я тебе перешлю письмо, которое является образцом? |
Автор: Snowy 22.2.2006, 19:20 |
Давай. Мыло в профиле. |
Автор: Pakshin A. S. 22.2.2006, 19:21 |
А как называются? |
Автор: Snowy 22.2.2006, 19:26 |
На закладк IndyMisc TIdDecoderMIME |
Автор: Pakshin A. S. 22.2.2006, 19:34 |
Отправлено.... С декодированием разобрался... |
Автор: Snowy 22.2.2006, 20:02 | ||
Не получил. Но поковырял разные типы сообщений. Получилось примерно следующее:
Count действительно равен 0, если сообщение не мультипарт. Сделал отдельную обработку для простых сообщений. С Base64 не проверял, но вроде должно работать. Также не проверял с UUE. Не знаю, какой у него ContentTransferEncoding . |
Автор: Pakshin A. S. 22.2.2006, 21:45 | ||||
Пока не проверял, но такое точно должно работать, правда проще не декодировать всё письмо, а продекодить только сообщение (благо общий шаблон документа один и тот же)... Но вот файл оно явно не будет сохранять... Вот тут провел эксперимент: Поставил задачу убрать #13#10 из файла (его текста кодированного в письме) и раскодировать... Процессор 3GHz c 512Mb ОЗУ cправился с поставленной задачей через достаточно большой промежуток времени. Прикинув, что прога будет работать на медленных компах, постановил, что способ сохранения фала "ручками" не идет... Все-таки как-то можно сохранить этот вложенный файл? ![]() Добавлено @ 21:50 Отправил с ящика... Не уверен, что сообщение будет таким же, каким оно пришло ко мне... Добавлено @ 21:58 Да... разница есть: Выдержка из оригинала:
А вот выдержка из письма, которое переслалось:
Есть разница... Добавлено @ 22:00 И эта разница оказалась существенной! Программа заработала именно с письмом, которое переслалось... |
Автор: Pakshin A. S. 22.2.2006, 22:02 |
Но ведь тот же самый Outlook все прекрасно читает (оба варианта письма)... Значит как--то все-таки это можно сделать, не изменяя отправку письма... ![]() ![]() |
Автор: Snowy 22.2.2006, 23:00 |
Оригинал мультипарт. Значит должен отлично проходить по стандартной схеме. сделай m.SaveToFile и пришли мне на petin<at>pisem.net |
Автор: Pakshin A. S. 22.2.2006, 23:06 |
Отправлено... |
Автор: Pakshin A. S. 23.2.2006, 13:34 |
Так... наконец-таки все заработало... Средство: изменил исходный текст письма, которое формировалось на сервере. |
Автор: Snowy 23.2.2006, 16:41 | ||
Готово:
|
Автор: jon76 15.1.2010, 14:29 |
Немного ![]() Вопрос такой, как доработать пример получниея почты что бы он после отделения присоединенного файла, удалял само письмо с сервера? А если не удалять письма, то как не получать ранее полученные письма? Приходит в голову проверять при получении MSgId получаемого письма и тех которые были получены ранее, но для этого прийдется хранить Id всех ранее полученных писем. Возможно есть более красивый способ. |
Автор: hkdkest 16.1.2010, 00:04 | ||
материалы и исходник http://codingrus.ru/readarticle.php?article_id=727 http://codingrus.ru/readarticle.php?article_id=549 http://codingrus.ru/infusions/pro_download_panel/download.php?did=62 |