Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
В общем поставил себе задачу 1) получить e-mail (ы) 2) прочитать e-mail, т.е. для каждого e-mail узнать a) с какого адреса б) тема в) body то бишь текст с) количество вложений и имена этих файлов. 3) сохранить эти файлы и перечисленную выше информацию . Задачу 1 я решил успешно. Нарыл бинарник getmail для виндов, он почту проверяет и сохраняет письма целиком в файлах msg1.txt,msg2.txt... Вложения также можно сохранять, но связи между ними и письмами после работы утилиты особо не просматривается. Файлы txt, сохраняемые getmail-ом при переименовании в *.eml на ура открываются в Outlook Express. Существует ли красивый способ "прочесть" файл (*.eml==*.txt) и сохранить вложение. Про mapi мне все известно, все это я делать умею. И почту принимать, и вложения читать и т.п. Даже программа с этими ocx давно и культурно написана. Но сейчас это не то что мне нужно. Если кто знает красивые решения, подскажите. Можно конечно, тупо читать письмо как текстовой файл, правда проге придется долго думать, какие же сохраненные вложения этому письму соотвествуют. Облазил sourceforge.net, уж очень много там всего, по идее нужно что-то типа procmail , но под винды приличного бинарника не нашел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2009, 17:57 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
продолжаю размышлять... а чем отличается *.eml от *.msg ??? и getmail какой формат делает, в *.eml я файл из txt сам переименовывал... Email Parser -это вроде как то что мне нужно... Нашел тут одну вещь... http://sourceforge.net/projects/ssfiledll/ Outlook Msg file parser dll, for retrival of information (such as sender name and address, recipieants names and address, body text, email header form outlook msg file, without using outlook. Either using mapi or ole2 to parse the structured storage file В двух вариантах типа с мапи и без него. И в описании Declare для vb.... надо попробовать, м.б. это то что надо... Код: plaintext 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2009, 21:28 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Выкинуть getmail, принимать почту самостоятельно, сообщения разбирать через CDO.Message. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2009, 00:52 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Что значит самостоятельно? Это вот так что ли? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. От VB по сути требуется Код: plaintext И чем же getmail плох. Другое дело, не стоит getmail использовать для отстыковки вложения, максимум чего он может, это приписать к названию файла mail-сервер of sender (а надо бы знать тему и самого sendera). Приведенный выше пример не работает, уже доперло, что .msg и .eml суть разные вещи. getmail делает txt=eml=MIME, и нужен MIME parser, таковых платных есть, но ну их...короче После ну очень продолжительных поисков нашел, чего искал: http://www.freevbcode.com/ShowCode.asp?ID=2540 В принципе работает, по сути эта хрень анализирует текстовое содержание файла,что я и думал делать, и делает все чего надо, но... русского юникода не понимает, поэтому может глючить, собственно знание русского для моей идеи и не требуется(обратное мыло всегда латиница, а тема-цифры номера телефона), но в силу вероятности наличия русского оно может глючить хуже:напр, не доходить до того места где вложение, т.е. если итти по этому пути, то можно взять за основу, но доводить придется. Ну и конечно файл вложения отделяется подольше чем 0,5сек, ну это уже издержки VB в отличии от C++, кот.увы на проф. уровне не знаю. OK, пошел выяснять что есть CDO.Message ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2009, 02:20 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Че то мне это CDO не понравилось, что-то надо ставить, а м.б. и не надо. И очень это все похоже на MAPI, т.е. зависит от того чего в системе стоит. Первый попавшийся пример кода на этом форуме у меня не заработал, зачем-то еще adodb добавлять пришлось, похоже енто очень завязано на то, чего в системе есть или нет... Бинарник getmail похоже надежней, гудвинов и хитрых библиотек по крайней мере не требует, а парсер так тот вообще из ничего написан, доводить только надо... С отправкой кстати проще:есть такая штука blad.exe называется. Жаль что я ее 7 лет назад не нашел, не возился бы со всеми этими mapi-control-ami. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2009, 03:13 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
авторЧто значит самостоятельно? Это вот так что ли?Нет. Я имел ввиду winsock + pop3. CDO ставить надо, однако не вижу в этом проблемы. Оно, кстати, и отправлять умеет. ADODB не надо, оно и так везде есть. К MAPI все это отношения не имеет. Чем не угодило fso? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2009, 11:06 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Проблемы то нету, когда у себя ставишь, а когда эта фигня будет запускаться на произвольном неизвестном PC,то они будут. Не можно конечно ворох ocx-в за собой тащить, но мне так думается, это дурной тон. Куда кидать то их при установке? В папку с программой? Или в system32, где они м.б. уже есть. Заменять одни версии другими? Нехолосо как-то. А не заменять, если есть? А вдруг несовместимость. А етот крякнутый 5 лет назад getmail у меня фурычит, и на другом pc фурычить будет. Короче сделал так: 1)getmail все принимает в папку mail, но не распаковывает 2)идем туда и последовательно курочим все письма 3)получаем усе что надо в GetMsgInfo, т.е. mail отправителя и тему из письма, параллельно другой командой getmail вынимаем все вложения из тек. письма в папку attach и составляем их описание Из этого же кода запускаем "процедуру использования сего", после чего и само письмо и вложения убиваем. 4)переходим к след. письму. Скачанный Парсер я использовать не стал, т.к. декодировать вложения на vb это очень долго, мой же наворот работает быстро и четко. Код: plaintext 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2009, 17:34 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Нет, не совсем хорошо. getmail прекрасно принимает и сохраняет в eml-образных файлах txt парсер "собственного производства" для того чтобы считать обратный mail и тему вполне годится, пусть даже с кириллицей в теме (кириллица в теме это уже однозначно неправильная тема, по замыслу программы). а вот с вложениями беда... т.е. в общем случае работает, а в частных, кот. много беда команда getmail Getmail.exe -forceextract msg1.txt глючноватая, работает только из директории, где лежит msg1.txt, скажем файлы rtf вообще не распаковывает, я уж не говорю о русских названиях файлов-здесь кстати это существенно. Команда -extract при принятии сообщения работает достойнее, но скажем тот же rtf не переваривает, надо ставить ключ -plain, тогда распаковывает но очень долго. В общем набросанный выше код вполне меня устраивает, но нужно придумать корректный чисто распаковщик вложений из отдельного письма, читать при этом само письмо не обязательно. Один очень хороший вариант я знаю: Outlook Express через mapi -на прием это легко и просто решает все задачи, но это частный случай, ибо почтовая программа не должна учавствовать, не у всех OE(не все работает через Mapi также хорошо как OE), в общем не пойдет. С CDO конечно можно покопаться, но описание, что чего-то надо устанавливать меня не радует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 04:38 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
авторнужно придумать корректный чисто распаковщик вложений из отдельного письма, читать при этом само письмо не обязательноВложение это часть письма, прочитать вложение не прочитав письма невозможно. Так и быть, дам на тарелочке часть кода, проверяющего почту, из антиспамовской программы. Код расчитан на работу с массивом винсоков, может проверять одновременно несколько ящиков. Код: plaintext 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. Код: plaintext 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. Код: plaintext 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 11:55 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Спасибо, будем разбираться. Сразу 2 вопроса. 1) WINSOCK==MSWINSCK.OCX=Microsoft Winsock Control 6.0 -?оно? с ним работал, есть такой 2) CDO для меня объект новый, где чего правильно взять, чтобы это точно было. Понимаю, что наверно google+microsoft+cdo, но там наверняка будет несколько вариантов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 13:29 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Вообще у меня есть CDOsys.dll (for win 2000) Это оно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 13:31 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Оно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 14:00 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Впечатляет. Почти убедили. Почитал вот это: http://msdn.microsoft.com/en-us/library/ms527302(EXCHG.10).aspx "Написал" совсем простой код, без всяких классов, работает, нравится. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Все-таки куча вопросов. По CDO: AntonariyCDO ставить надо, однако не вижу в этом проблемы. Оно, кстати, и отправлять умеет. ADODB не надо, оно и так везде есть. На какой ActiveX Data Objects надо ссылаться, чтобы заведомо не было проблем на произвольном PC (у меня их куча...)? CDO "ставить" Точно надо? Какой файл? На XP есть 6.2.4.0 (RU для win2000), на 2003 6.5.6757.0 (без слов 2000). Взаимозаменяемы ли? Как правильно поступить? Просто кинуть cdosys.dll в папку с программой наверно не правильно, хотя с ocx иногда поступаю именно так... По WINSOCK: Стоит ли разбираться? Помню как-то писал терминальную программу для себя на одном pc, на соседнем не заработала чуть ли не с тем же ocx, плюнул, откомпилировал на том для кот. предназначалась. Или найти-попытаться winsock-API? Но там и с ocx черт ногу сломит. Вообще-то аккуратный exe-шник getmail.exe вполне справляется с задачей приема почты, я бы сказал на 5+ .М.б. не стоит морочиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 18:09 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Про CDO: м.б. хорошая идея будет включить файл cdosys.dll из win2003(EN) в дистрибутив программы, при установке мувнуть его в %system%, и вполнить команду regsvr32 /s %system%\cdosys.dll С условием заменять на более новую версию. Оно ругаться не будет если скажем язык не совпадает? А если это не администратор устанавливает? А надо ли удалять при инсталяции,вдруг оно там уже было? regsvr32 /u /s %system%\cdosys.dll То что файлы "взаимозаменяемы" я понял. Те 2 установочных пакета, что можно скачать на Microsoft, это не то. это MAPI,а не CDO, причем инсталятор гнусный и ругается, да еще и Outlook Express потом ругается, типа "не по умолчанию стал я..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 10:05 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Насчет распространения CDO и прочих ocx — нужно использовать инсталлятор, он сам решит, что и когда заменять. Обычно (в MS — всегда) несовместимые версии библиотек называются по-разному, поэтому с заменой проблем быть не должно. Устанавливать программы может только администратор или продвинутый пользователь(?). Потому что обычный пользователь не имеет доступа к системной части реестра. Язык рояля не играет. Всегда лучше использовать ADO последней версии, а вообще версии 2.5-2.8 совместимы и взаимозаменяемы. Более ранние — нет. Весь необходимый код для работы с винсоком я предоставил, больше ничего с ним делать не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 10:55 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
С этим CDO уже запутался. Сделал: Взял cdosys.dll из win2003 (6.5.6757.0) запихнул его в дистрибутив Инсталятору написал: копировать в %systemdir%, заменять если новее, при удалении не деинсталировать после распаковки выполнить команду regsvr32 /s cdosys.dll Пробую на своем XP:(у меня стоит версия 6.2.4.0). Запускаю инсталятор, все хорошо, смотрю-осталась моя библиотека. Переделываю инсталлятор, пишу:заменять безусловно, повторяю тест: и опять моя 6.2.4.0 Ладно, перегружаюсь в безопасный режим, удаляю 6.2.4.0 из sys32, перегружаюсь нормально, выжидаю, смотрю, да, убил, нету его в sys32. Запускаю свой инсталятор, ага , появилась. Смотрю версию:....6.2.4.0, какая и стояла. Т.е. устанавливали эту, а win из архивов достал старую. Ладно, если win такой умный.А если cdosys.dll до установки в системе не было, то выделенное черным шрифтом корректно и приведет к рабочим результатам для произвольного pc (xp,2003)? М.б. это теперь все же обязательный компонент и можно не париться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 15:33 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Antonariy, разбираюсь потихоньку с вашим кодом с pop3-winsock, вернее вдумчиво упрощаю и тестирую. пока удалось скачать и сохранить "первое" письмо. Споткнулся вот здесь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. s = CheckMsg(m_oMessage) очевидно у вас проверяет что все хорошо и дает команду серверу для перехода к POP3_DELE : удалить письмо, затребовать следующее. Не проясните? Неохота просто рыться чтобы узнать как выглядит команда delete message И в чем сотоит этот CheckMsg(письмо)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 12:40 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
CheckMsg проверяет, считать ли письмо спамом. Вот кусок CheckMsg, в котором происходит возврат команды, он должен ответить на все вопросы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 15:36 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
Antonariy, Доразобрался с Winsock, упростил до предела ваш код, все работает, потом чуть усложнил под себя на предмет анализа темы и разбора вложений и... уж очень все мудрено все-таки.. У меня алгоритм простой: 1.принять всю почту что есть 2.вытащить из каждого письма mail-тему-вложение 3.либо передать все это факс-серверу на исполнение 4.либо отослать юзеру ответ, чего в письме неправильно 5.уничтожить все компоненты писем и успокоиться. Причем логика такая, что в таймере, кот. это запускает структура Код: plaintext 1. 2. У вас (и видимо по-другому нельзя) делать по-моему принципу бессмысленно, ибо все результаты возвращаются из событий winsock, и timer.enabled=true надо запихивать именно туда, а вот куда именно, и сколько раз, фиг знает, потому как если winsock выйдет по-ошибке, и где-то я что-то забуду предусмотреть, то таймер уснет навсегда... Посему решил я все-таки оставить getmail.exe, ибо делает он тоже самое, и делает хорошо (просто принять и сохранить msg1.txt, msg2.txt), запускается одной командой, и по выходу ShellAndContinue могу спокойно запускать последовательную обработку через CDO.message, за что вам огромное спасибо, ну и не надо с winsock.ocx морочиться. Ну что касается winsock API, дело точно гиблое, ибо и с ocx черт ногу сломит, и если б не ваш код, вряд ли б когда-либо сумел сэтим разобраться.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2009, 11:06 |
|
||
|
Как прочесть сообщение e-mail (*.eml).
|
|||
|---|---|---|---|
|
#18+
На здоровье) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2009, 12:48 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35770217&tid=2159311]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 153ms |

| 0 / 0 |
