![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Итак, на почтовый ящик в инете поступило n штук писем с вложенными файлами.
Вот эти письма я должен получить поочередно из программы; получить текст письма, сохранить на жестком диске вложенный файл под определенным именем, получить адрес отправителя и время получения письма на сервер. Как это реализуется? Киньте ссылки на исходники таких функций (получение нужной информации, описанной выше)... Заранее огромное Спасибо! ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
http://forum.vingrad.ru/index.php?act=Sear...p;#038;skipped=
Добавлено @ 23:31 Вот прямой линк на код: http://forum.vingrad.ru/index.php?showtopi...st&p=342291 |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Спасибо, буду разбираться, хотя с первого взгляда все очень просто...
![]() |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Я все-таки что-то не понял... Все прекрасно работает, кроме получения самого текста письма...
![]() P. S. Использую код Snowy из http://forum.vingrad.ru/index.php?showtopi...st&p=342291 |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Вот. Чуть добавил:
|
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Так... чет не пашеть...
m.MessageParts.Count у меня тождественный 0 всегда, хотя письма почтовики берут... |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ты ж только что писал, что все работает.
При Count=0 вообще ничего не будет работать. Я не проверял - лень сервер поднимать для теста. Нужно оттрейсить и посмотреть, куда идет и что идет. Еще полный текст можно получить m.Body - string. Но там будет полный текст, включая файлы. Кроме того. HTML текст не считается текстом - это приаттаченный html файл. Текстом считается только plain-text. Так что проблема может быть и в этом. |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
РАботало с самодельными письмами, отправленными самому себе... ьеперь письма отправлются через формочку в интернете. Outlook Express, к примеру, все прекрасно читает, а вот прога не видит ни приаттаченного файла, ни самого текста письма, хотя в m.Body есть полная информация, как я понимаю и по файлу и по самому письму:
Может стоит извлечь отдельно все эти большие закодированные части, раскодировать их, а потом попробовать вывести само письмо и попробовать каким-то образом сохранить приаттаченный файл.... Или все-таки есть выход более культурный? |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
||||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Вот этот код с полным протоколированием:
Пример работы у меня:
Все корректно показывает. Файл корректно сохраняет. Добавлено @ 19:17 В Indy есть перекодировщики. |
||||
|
|||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
![]() Может я тебе перешлю письмо, которое является образцом? |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Давай. Мыло в профиле.
|
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
||||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
На закладк IndyMisc
TIdDecoderMIME |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
||||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Не получил. Но поковырял разные типы сообщений. Получилось примерно следующее:
Count действительно равен 0, если сообщение не мультипарт. Сделал отдельную обработку для простых сообщений. С Base64 не проверял, но вроде должно работать. Также не проверял с UUE. Не знаю, какой у него ContentTransferEncoding . |
|||
|
||||
Pakshin A. S. |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Пока не проверял, но такое точно должно работать, правда проще не декодировать всё письмо, а продекодить только сообщение (благо общий шаблон документа один и тот же)...
Но вот файл оно явно не будет сохранять... Вот тут провел эксперимент: Поставил задачу убрать #13#10 из файла (его текста кодированного в письме) и раскодировать... Процессор 3GHz c 512Mb ОЗУ cправился с поставленной задачей через достаточно большой промежуток времени. Прикинув, что прога будет работать на медленных компах, постановил, что способ сохранения фала "ручками" не идет... Все-таки как-то можно сохранить этот вложенный файл? ![]() Добавлено @ 21:50 Отправил с ящика... Не уверен, что сообщение будет таким же, каким оно пришло ко мне... Добавлено @ 21:58 Да... разница есть: Выдержка из оригинала:
А вот выдержка из письма, которое переслалось:
Есть разница... Добавлено @ 22:00 И эта разница оказалась существенной! Программа заработала именно с письмом, которое переслалось... |
||||
|
|||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Но ведь тот же самый Outlook все прекрасно читает (оба варианта письма)... Значит как--то все-таки это можно сделать, не изменяя отправку письма...
![]() ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Оригинал мультипарт. Значит должен отлично проходить по стандартной схеме.
сделай m.SaveToFile и пришли мне на petin<at>pisem.net |
|||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
||||
|
||||
Pakshin A. S. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Так... наконец-таки все заработало...
Средство: изменил исходный текст письма, которое формировалось на сервере. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ну, блин. Докопался до истины - мелкий баг в Indy9. В 10-й пока не смотрел.
Недоработка в class function TIdMIMEBoundary.FindBoundary Не предусмотрено, что могут быть пробелы слева и справа от '='. Вот из-за этих пробелов инди не находит маркер частей. Если пробелы убрать, то все проходит на ура. Код инди корректировать некультурно. Значит нужно под нее подстраиваться. Код напишу позже. Сейчас есть хочу ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Готово:
|
|||
|
||||
jon76 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.1.2010 Репутация: нет Всего: нет |
Немного
![]() Вопрос такой, как доработать пример получниея почты что бы он после отделения присоединенного файла, удалял само письмо с сервера? А если не удалять письма, то как не получать ранее полученные письма? Приходит в голову проверять при получении MSgId получаемого письма и тех которые были получены ранее, но для этого прийдется хранить Id всех ранее полученных писем. Возможно есть более красивый способ. Это сообщение отредактировал(а) jon76 - 15.1.2010, 15:05 |
|||
|
||||
hkdkest |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 300 Регистрация: 30.11.2008 Репутация: нет Всего: 1 |
материалы и исходник TIdMessage - объект почтового сообщения Indy Отправить письмо на E-mail Почтовый клиент (основы) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |