|
Почтовая программа+Письмо в Inbox+DragDrop
|
|||
---|---|---|---|
#18+
В общем есть Почта Windows(бывший OE), в ней папка Inbox, в ней письма. Опыт использования показывает, что если перетащить письмо из Inbox в папку проводника, то там создается .eml (перетаскиваемое письмо c именем = Тема Письма). Все письма в оригинальной базе уже хранятся в .eml файлах типа \Windows Mail\Local Folders\Inbox\729E5421-0000C80D.eml Задача: через DragDrop получить ссылку на целиковый .eml файл соответствующий выбранному письму. Грубо: перетащил письмо в контрол, далее работаю с этим .eml, например через CDO.Message Кодируем текстбох (AllowDrop=true): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Тащим в него письмо. Дебаг дает следующие форматы: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Пытаемся извлечь информацию: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
e.Data.GetData(DataFormats.Html) -это HTML-код страницы письма (если оно HTML) e.Data.GetData(DataFormats.Text)-это текст письма (если оно PlainText, либо преобразование HTML->TEXT) + заголовок From/To/Subject/Date: 24 июня 2016 г. 13:24 (фигово что дата на русском) Уже неплохо. На этом интуиция моя закончилась. Но мне б хотелось получить .eml целиком Предполагаю что можно извлечь 1) путь к .eml в базе программы (не уверен, потому что в старом OE не было отдельных .eml в базе, а был здоровый файл базы, при этом .eml при перетаскивании в папку писался точно также) 2) тупо данные (набор байтов), из которых пишется полный .eml при перетаскивании Есть идеи? Подозреваю что надо дербанить FileGroupDescriptor или FileContents. Как это делать? В DataFormats.XXX намеков не вижу, DataFormats.FileDrop в списке отсутствует ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2016, 15:14 |
|
Почтовая программа+Письмо в Inbox+DragDrop
|
|||
---|---|---|---|
#18+
Разобрался, как эта фигня работает. "Internet Message (rfc822/rfc1522)" -это собственно .eml целиком что мне нужен "FileGroupDescriptor" -содержит "рекомендуемое" имя файла (Тема_Сообщения.eml) -в API-структуры не вдавался, мне это не нужно Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
По большому счету и файл .eml на диск сохранять то наверно необязательно. e.Data.GetData("Internet Message (rfc822/rfc1522)", True) сразу скинуть в ADODB.Stream и в CDO.Message ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 03:23 |
|
Почтовая программа+Письмо в Inbox+DragDrop
|
|||
---|---|---|---|
#18+
А IO.MemoryStream -> ADODB.Stream без промежуточного файла никак? Хотя б через массив байтов? Не могу понять как в ADODB.Stream массив байтов загнать вместо Stm.LoadFromFile(Path) В принципе пофиг, но как-то не очень красиво, писать данные в файл, чтоб потом их оттуда прочесть и файл удалить: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2016, 04:14 |
|
|
start [/forum/topic.php?fid=20&msg=39263914&tid=1400490]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 20ms |
total: | 161ms |
0 / 0 |