Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Ответить
 • Просмотры: 1
Аватара пользователя
Jean55

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Jean55 »

У меня — находит (VBScript):



Код:

Код: Выделить всё

Option Explicit
Const olFolderInbox = &H06
Dim objOutlook
Dim objNameSpace
Dim objMAPIFolder
Dim collItems
Dim objMailItem
Set objOutlook    = WScript.CreateObject("Outlook.Application")
Set objNameSpace  = objOutlook.GetNameSpace("MAPI")
Set objMAPIFolder = objNameSpace.GetDefaultFolder(olFolderInbox)
Set collItems     = objMAPIFolder.Items
Set objMailItem   = collItems.Find("[Subject] = 'Налоги_июнь_2011'")
Do Until objMailItem Is Nothing
	With objMailItem
		WScript.Echo "EntryID:", .EntryID
		WScript.Echo "==============="
		WScript.Echo "To:     ", .To
		WScript.Echo "Subject:", .Subject
		WScript.Echo "Body:"
		WScript.Echo "---------------"
		WScript.Echo .Body
		WScript.Echo "---------------"
		WScript.Echo
	End With
	Set objMailItem = collItems.FindNext
Loop
Set objMailItem   = Nothing
Set collItems     = Nothing
Set objMAPIFolder = Nothing
Set objNameSpace  = Nothing
Set objOutlook    = Nothing
WScript.Quit 0


Цитата:





Код:

Код: Выделить всё

EntryID: 00000000FEECAA007BA93142AA08FBF8921FB867C4092000
===============
To:      someuser1@mail.com
Subject: Налоги_июнь_2011
Body:
---------------
Hello1
---------------
EntryID: 00000000FEECAA007BA93142AA08FBF8921FB867040A2000
===============
To:      someuser2@mail.com
Subject: Налоги_июнь_2011
Body:
---------------
Hello2
---------------





Работаете по полному соответствию искомой строки полю «Тема»?
Аватара пользователя
Jean55

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Jean55 »

Цитата Iska:



Работаете по полному соответствию искомой строки полю «Тема»?
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Не-а, полное соответствие - это "==" ?. А может есть функция (метод) обрезки начальных и концевых пробелов, как ALLTRIM() в Фоксе?. Это удобнее, если использовать в фильтре поиска не символьную строку, а переменную.



.
Цитата Iska:



У меня — находит (VBScript):

Код:
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




С VBScript не работал (просто быстренько слазил прямо из форума в Инет росмотреть- что это такое), но из примера вполне понятно, что нужен обычный тупой перебор почты на соответствие. Кстати тогда понятно, почему 1-ю строку находит сразу - она ведь первая в списке "Входящих". Так это у меня и без Find работало. Ну что-же по крайней мере с этим ясно, за что - спасибо




Цитата Iska:



Цитата:

Код:
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




*************************************************************

Кус моего модуля под Фоксом :l

oCnt = loFldr.Items.Count && всего писем в "Входящих"

IF loCnt>0

FOR i=1 TO loCnt

WAIT loFldr.Items(i).Subject WINDOW NOWAIT

и т.д. ......

*************************************************************

так меня интересовало вычисление нумера " i " а не EntryID, ведь похоже,что " i " - это тоже свойсто только наверное папки, а не письма и без перебора писем в папке до него не добраться.



И все таки
Цитата Jean55:



В любом случае - помощь хорошая (да! - кстати не пойму как отправить благодарности на форуме, а надо бы).
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




- хоть и мелочь но сделать это я должен, по правилам хорошего тона.

Е. Шапиро
Аватара пользователя
Jean55

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Jean55 »

Цитата Jean55:



Не-а, полное соответствие - это "==" ?.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Нет, я про это:


Цитата:



Find Method



Additional Notes



If you are trying to use the Find or Restrict methods with user-defined fields, the fields must be defined in the folder, otherwise an error will occur. There is no way to perform a "contains" operation. For example, you cannot use Find or Restrict to search for items that have a particular word in the Subject field. Instead, you can use the AdvancedSearch method, or you can loop through all of the items in the folder and use the InStr function to perform a search within a field. You can use the Find and Restrict methods to search for items that begin within a certain range of characters. For example, to search for all contacts with a last name beginning with the letter M, use this filter:



Код:

Код: Выделить всё

sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"





То есть: поле Тема действительно полностью состоит из текста «Налоги_июнь_2011», ни больше, ни меньше? Если нет, то пробуйте пользовать указанный метод «AdvancedSearch()».




Цитата Jean55:



Кус моего модуля под Фоксом :l

oCnt = loFldr.Items.Count && всего писем в "Входящих"

IF loCnt>0

FOR i=1 TO loCnt

WAIT loFldr.Items(i).Subject WINDOW NOWAIT

и т.д. ......

*************************************************************

так меня интересовало вычисление нумера " i " а не EntryID, ведь похоже,что " i " - это тоже свойсто только наверное папки, а не письма и без перебора писем в папке до него не добраться.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




«EntryID» был приведён мною просто для примера. Что Вам нужно, пока не понял.
Аватара пользователя
Iska

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Iska »

Цитата Jean55:



Насчет Фокса: для файл-серверных систем малых предприятий еще очень даже... (имел возможность сравнить с наработками на других языках, кстати довольно свежими), мне уже не 30 да и коней на переправе не меняют.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Соглашусь Изображение У меня на работе тоже половина всего софта на фоксе и 2 программера, которые постоянно доделывают и пишут новое. Сам я писал на C++, Visual FoxPro, теперь уже почти 5 лет пишу на C#.




Цитата Jean55:



кстати не пойму как отправить благодарности на форуме, а надо бы).
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Под каждым сообщением, есть кнопка с поднятым пальцем "полезное сообщение" Изображение
Аватара пользователя
Delirium

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Delirium »

Цитата Iska:



То есть: поле Тема действительно полностью состоит из текста «Налоги_июнь_2011», ни больше, ни меньше? Если нет, то пробуйте пользовать указанный метод «AdvancedSearch()».
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Поле Тема действительно полностью состоит из текста «Налоги_июнь_2011»- один в один, я его для пробы посто передирал копированием из свойств письма в Outlook, хотя в реальности это будет переменная, формируемая мною автоматисски, в зависимости от месяца и года.




Цитата Iska:



«EntryID» был приведён мною просто для примера. Что Вам нужно, пока не понял.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook





Цитата Jean55:



*************************************************************

Кус моего модуля под Фоксом :l

oCnt = loFldr.Items.Count && всего писем в "Входящих"

IF loCnt>0

FOR i=1 TO loCnt

WAIT loFldr.Items(i).Subject WINDOW NOWAIT

и т.д. ......

*************************************************************
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




При изменении > в цикле от 1 до oCnt - на экран выводятся .....Items(i).Subject - наименования тем писем в соответствующей папке, с самого раннего до последнего. Т.е. > определяет вполне конкретное письмо и соответственно, и именно по этому > наверное можно выйти на конкретное письмо, но > - похоже свойство письма в папке и как до него (до этого самого > ) добраться - вопрос конечно интересный, но похоже неважный - всё равно идет полный прогон по папке, я это > и так получаю .

А AdvancedSearch и LastName - гляну завтреча, сегодня уже лом.

Кстати по моему в строке sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'" - по моему ошибка, не 'N' а 'M', ежели по Additional Notes. А если нет - то почему?

С уважением Е.Шапиро
Аватара пользователя
Jean55

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Jean55 »

Цитата Jean55:



Поле Тема действительно полностью состоит из текста «Налоги_июнь_2011»- один в один, я его для пробы посто передирал копированием из свойств письма в Outlook, хотя в реальности это будет переменная, формируемая мною автоматисски, в зависимости от месяца и года.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Хмм… Тогда даже не знаю.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook
Ваш визуально аналогичен
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook
в части поиска.



Jean55, а попробуйте пока просто проверить — сохранить
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook
в файле с расширением «.vbs» в кодировке ANSI (windows-1251), и запустить его из командной строки на исполнение:



Код:

Код: Выделить всё

cscript.exe //nologo "\.vbs"

Найдёт ли он у Вас совпадения? Все ли совпадения переберёт? И отпишитесь сюда.


Цитата Jean55:



При изменении > в цикле от 1 до oCnt…
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Спасибо, теперь ясно. Вот здесь у Вас не вполне верное рассуждение:


Цитата Jean55:



Т.е. > определяет вполне конкретное письмо
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




i — порядковый номер, определяющий конкретный объект «Item» в текущий[/i] момент. Добавится/удалится какой-либо «Item» (здесь это обычно «MailItem») — и всё, номера сдвинутся. А вот уникальное свойство «EntryID» по-прежнему будет однозначно определять данный «Item» среди прочих «Item'ов».


Цитата Jean55:



Кстати по моему в строке sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'" - по моему ошибка, не 'N' а 'M', ежели по Additional Notes. А если нет - то почему?
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Потому что верно именно 'N':



Код:

Код: Выделить всё

'M' > 'LZZZ' и 'M' < 'N'
'Mail' > 'LZZZ' и 'Mail' < 'N'
'MMM' > 'LZZZ' и 'MMM' < 'N'
'MZZ' > 'LZZZ' и 'MZZ' < 'N'

но не 'M':



Код:

Код: Выделить всё

'M' > 'LZZZ' и 'M' < 'M'
'Mail' > 'LZZZ' и 'Mail' < 'M'
'MMM' > 'LZZZ' и 'MMM' < 'M'
'MZZ' > 'LZZZ' и 'MZZ' < 'M'
Аватара пользователя
Iska

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Iska »

Общее и полное здрасьте всем. После отпусков и прочих дел (включая, естественно и самостоятельную работу и самостоятельные разборки с возникающими вопросами) можно сделать некоторые промежуточные выводы.

Модуль (пока что - тестовый, делающий усё от начала до конца единым файлом) работает!!!

Т.е. реально выполняется (и с вашей помощью):

- скачать общий .pdf файл налогов

- поделить на отдельные .pdf страницы

- из каждой страницы выделить фамилю и имя и из базы Фокса считать мэйл этого человека

(кстати, та ещё задачка! )

- производится отправка этих отдельных .pdf страниц на почту этих людей

Сейчас производится доводка (в основном вопросы сервиса)

- программная проверка загрузки и загрузка, при необходимости Outlook (ну не верю я что пользователли

работают всегда по инструкции и без проколов!!!)

- программная загрузна новых входящих писем Outlook

- создание (по требованию) списков работников, которые есть в общем .pdf файле и нет в базе Фокса и,

естественно наобормот.

Наверняка будут ишшо и другие. Но это в основном Фоксовские прибамбасы, а поэтому надеюсь без серьёзных промблем (тьфу-тьфу шобб не сглазить).



Затем надо будет расташшить эту программу по объектам модуля обработки почты, что тоже только вопрос техники и времени.



А у меня сейчас вопрос, чесно говоря не принципиальный (можно обойтись просто сообщением на экран

"Загрузите Outlook... ") , но усе равно интересно:

как программно обновить почту Outlook средствами Объектной модели Outlook? Как я понял это либо событие

NewMail, либо метод AddNew ( AddNew, похоже просто имеет больше параметров, что мне просто не надо,

мне надо просто обновить папку Входящие), а вот как это делать - не понял ни черта, хотя примеров дофига

и более. Два дня (с перерывами) копал.

Например в MSDN: "......NewMail используется для выполнения пользовательских действий при получении

пользователем сообщения электронной почты."

О каком пользователе и сообщении электронной почты идет речь? Ведь по логике Outlook, при нормальном

пуске все запрашивает самолежательно. Мне же нужно принудительное обновление, поскольку, похоже

обновление входящей почты при запуске Outlook из под Фокса не происходит... Ну и т.д.

Т.е. как реально желателен кус кода VBA на принудительное обновление входящей почты и если можно с разъяснениями. Буду очень благодарен

Е. Шапиро
Аватара пользователя
Jean55

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Jean55 »

Цитата Jean55:



как программно обновить почту Outlook средствами Объектной модели Outlook?
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Объект Outlook.Namespace, его свойства и методы - AskIt.RU


SyncObject Object
-->
Start Method
.



Не забудьте убедиться, что в свойствах соответствующей группы отправки/получения почты в параметрах соответствующей учётной записи установлены флажки «[*] Отправка почты», «[*] Получение почты».
Аватара пользователя
Iska

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Iska »

Спасибо, SyncObject Object и Start Method - вполне пошло и работает. Хотя конечно не без некоторых непоняток : при прогоне всей задачи несколько раз подряд - свойство ....SyncObjects.Count своего значения не меняет. Описание: "Возвращает указание на количество объектов в указанной коллекции. Только для чтения."



И сразу же вопрос: количество чего? Если новых объектов (записей почты???) - то после первого же прогона значение ....SyncObjects.Count должно быть равно нулю, ведь данные уже синхронизированы, а оно не обнуляется. Или это только сегодняшняя почта - а если компунтер (или даже просто Outlook) несколько дней не включали, то будет ли качать от последнего включения (синхренизации данных)?



Конечно, как мед- так и ложкой: а можно ли как-то закачивать почту по выбору, например по свойству .Subject. Ни у SyncObject, ни у SyncObjects этого свойства нетути - нужно что-то иное.

В ссылке "Объект Outlook.NameSpace, его свойства и методы - Asklt.RU" (см выше) есть такие строки:

**************************************************************

...

...

oNamespace.SyncObjects("Все учетные записи").Start



End Sub



'… и ловим события появления нового сообщения



Private Sub oItems_ItemAdd(ByVal Item As Object)



MsgBox Item.Subject



End Sub



В документации Microsoft для события ItemAdd указано, что оно.....

**************************************************************



Вроде бы то шо надоть и если зацепиться за Item.Subject то можно все раскрутить в куче с .SyncObject, но абсолютно не понятно, почему ".... и ловим события появления нового сообщения " ПОСЛЕ программной загрузки почты ,а событие ItemAdd нигде в примере не прописано.



И ишшо стоит ли как-то ускорять поиск конкретного письма во "Входящих" с помощью метода AdvancedSearch()

(мутный он какой-то, как деревенский самогон - поиск в асинхронном режиме, который пока непонятно как прерывать; какие-то странные строки фильтра - "urn:schemas:mailheader:subject " - только и остаётся драть не разбираясь да и нет времени). Т.е. реально ли он шустрее обычного тупого перебора и (хотя бы ориентировочно) при каком количестве записей почты? Может просто предусмотреть зачистку данных хотя-бы раз в год и "не морочить себе две пачки маргарина"?

Буду очень благодарен за ответ.

Е. Шапиро
Аватара пользователя
Jean55

Re: Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook

Сообщение Jean55 »

Цитата Jean55:



И сразу же вопрос: количество чего?
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook





Цитата:



SyncObjects Interface



Contains a set of SyncObject objects representing the Send/Receive groups for a user.





Таким образом, сколько бы Вы раз не «прогоняли задачу» — количество групп отправки и получения от этого не изменится. «Все учетные записи» — одна из таких групп (возможно — единственная).




Цитата Jean55:



а событие ItemAdd нигде в примере не прописано.
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Вот обработчик события:



Код:

Код: Выделить всё

Private Sub oItems_ItemAdd(ByVal Item As Object)

Само событие генерируется самим приложением. Вы получите столько вызовов этой процедуры, сколько будет добавлено объектов.




Цитата Jean55:



И ишшо стоит ли как-то ускорять поиск…
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook




Не могу дать Вам какого-либо определённого ответа, поскольку:



1) я не пользуюсь Microsoft Outlook, и никогда с ним не работал;

2) вытекающее из первого — если бы я даже захотел попробовать — у меня не найдётся подходящего объёма данных базы писем.
Ответить

Вернуться в «Microsoft Office (Word, Excel, Outlook и т.д.)»