|
Outlook. После загрузки первоначально некорректно отрабатывает код для события NewMailEx
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые! В Outlook2016 реализован код обработки события поступления нового сообщения. Обработка этого события инициируется в разделе проекта ThisOutlookSession путем создания объекта класса модуля: Код: vbnet 1. 2. 3. 4.
Само сообщение обрабатывается уже самим созданным пользовательским объектом в классе модуля ClassInboxMail. Суть обработки простая: пробежаться по всем непрочитанным объектам, накопившимися в папке "Входящие", из объектов, являющимися сообщениями электронной почты, определить отправителя, тему сообщения, адрес отправителя, есть ли в сообщении вложения и, если таковые имеются, то посчитать количество и сохранить исключительно прикрепленные, но не вложенные в тело сообщения в определенной директории на дисковом пространстве и выдать информационное сообщение на экран с общим итогом в виде отчета. При этом заложено, что в каком бы приложении в настоящее время не находился пользователь, приложению Outlook должен передаваться фокус, и окно приложения должно появляться поверх всех открытых приложений. Вот как это реализовано кодом в классе модуля. Код: 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. 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.
При определении SMTP-адреса отправителя используем функцию, которая размещается в обычном модуле: Код: 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.
И все как бы замечательно, оттестировано, по шагам пройдено и, начиная с получения второго и последующих сообщений, за исключением некоторых нюансов, работает безукоризненно. Проблема возникает при получении самого первого нового сообщения после загрузки приложения. Сразу оговорюсь, макросы включены, никаких правил не установлено. Но почему-то код на строке вывода итогового сообщения выдает ошибку (строка MsgBox). Отладчик показывает, что параметр ListData пустой, соответственно, конечно длина сообщения отрицательная, что является ошибкой. При этом, в режиме отладки перевожу курсор на начало исполнительного кода, заново возобновляю процесс и все отрабатывает замечательно. Из нюансов работы кода следует отметить, что по непонятным мне причинам команда WShell.AppActivate начинает срабатывать не сразу, а живет какой-то своей жизнью.. Через какое-то время она как бы раскочегаривается и начинает отрабатывать заложенную в нее функцию. У кого-нибудь есть идеи, соображения, от чего так происходит и как с этим бороться? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2020, 16:26 |
|
Outlook. После загрузки первоначально некорректно отрабатывает код для события NewMailEx
|
|||
---|---|---|---|
#18+
сделать задержку и дать Outlook загрузиться и инициализироваться полностью, а потом продолжить выполнения вашего кода. там наверняка есть какой то объект\контекст\диспетчер для синхронизации ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 08:35 |
|
Outlook. После загрузки первоначально некорректно отрабатывает код для события NewMailEx
|
|||
---|---|---|---|
#18+
Roman Mejtes, Идея хорошая, попробовал, написал на событие загрузки приложения следующий код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код отрабатывает корректно. Но после его завершения сам себе отсылаю тестовое сообщение, результат тот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 16:51 |
|
Outlook. После загрузки первоначально некорректно отрабатывает код для события NewMailEx
|
|||
---|---|---|---|
#18+
Продолжаю тему, не сдаюсь пока. Ладно, думаю, я тебя обману. Там, где возникает ошибка, поставлю-ка я код обработчика ошибок по типу Код: vbnet 1. 2. 3.
и метку ставлю на For, туда, куда я переставляю курсор в режиме отладки и запускаю процесс повторно (цикл прохождения по всем сообщениям в папке Входящие). Ага, как бы там... Процесс зацикливается, что принуждает перезагружать приложение Outlook. Также пытался экспериментировать со способом отлова ошибки и вставляя режим выжидания кодом, указанным в Application_Startup Результат тот же. И единственные костыль, применение которого мне помогло, это вот такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
, где метка 1:= MyLabel: но это убого, согласитесь. Любые мысли, идеи поддержу, проверю, ибо мне, главное, понять причину. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 17:53 |
|
|
start [/forum/topic.php?fid=60&tid=2154778]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 141ms |
0 / 0 |