Исходный текст приложения
Messages
В обработчике события Load (Загрузка) формы создаются две объектные пере менные — OLApp, которая указывает на приложение Outlook, и mNameSpace,
которая указывает на папки Outlook. Эти переменные объявлены в разделе декларации формы:
Dim OLApp As Application
Dim mNameSpace As NameSpace
Затем в программе объявляется переменная AllContacts, которая указывает на элементы (объекты) в папке Contacts.
Dim AllContacts As Items
Программа просматривает все объекты в семействе AllContacts и добавляет имена контактов (свойство FullName) в окно элемента управления Combo 1. Значение свойства Sorted элемента управления Combol устанавливается равным True, и программа удаляет любые повторяющиеся элементы (которые могут появиться в последовательных позициях списка). Ниже приведена программа, которая обращается к Outlook и устанавливает значение объектной переменной AllContacts.
Программа 14.22.
Инициализация проекта Messages
Private Sub Form_Load()
On Error GoTo OutlookNotStarted
Set OLApp - CreateObject ("Outlook Application")
On Error GoTo NoMAPINameSpace
Set mNameSpace = OLApp.GetNamespace("MAPI")
Set AllMessages = _
mNameSpace.GetDefaultFolder(olFolderInbox).Items
Set AllContacts = _
mNameSpace.GetDefaultFolder(olFolderContacts).Items
Combo1.Clear
For Each mcontact In AllContacts
Combo1.Addltem mcontact.FullName
If Combo1.List(Combo1.NewIndex)= _
Combo1.List(Combo1.NewIndex + 1) Then _
Combo1.RemoveItern Combo1.NewIndex
Next
Combo1.ListIndex = 0
Exit Sub
OutlookNotStarted:
MsgBox "Could not start Outlook"
' (He удалось запустить Outlook)
Exit Sub
NoMAPINameSpace:
MsgBox "Could not get MAPI NameSpace"
' (He удалось получить место расположения MAPI)
Exit Sub
End Sub
Фильтрация сообщений
Пользователь может выбирать имя и (или) диапазон дат для сужения области поиска. Если флажки "From this Sender (От данного отправителя)" и "Between this dates (Между этими датами)" сброшены, то щелчок на кнопке Show Selected Messages приведет к выводу в окно элемента управления List Box информации обо всех сообщениях, находящихся в папке InBox. Если установить один или оба флажка, то программа выведет информацию только о тех сообщениях, которые соответствуют указанным критериям.
Чтобы отфильтровать сообщения, следует воспользоваться методами Find и FindNext объектной переменной AllMessages. Переменная AllMessages объявлена как переменная типа Item. Объект Item поддерживает эти два метода для получения выбранных сообщений. Синтаксис метода Find имеет вид:
Items.Find(filterstring)
где filterstring — это выражение, которое задает критерий фильтрации. Метод Find возвращает объект, тип которого зависит от типа семейства Items. Если метод Find применяется к папке InBox, то будет возвращен объект Mailltem, если же этот метод применяется к папке Contacts, то будет возвращен объект Contactltem. После того как найден первый соответствующий критерию объект, оставшиеся могут быть получены вызовом метода FindNext, причем, без указания параметров.
Параметр filterstring — это строковое выражение, в котором объединены имена полей, логические операции и константы. Чтобы получить информацию о сообщениях, отправленных из Site Builder Network, необходимо набрать следующую строку:
"[SenderName] = "Site Builder Network"
Чтобы получить список всех сообщений, отправленных в октябре 1998 года, следует набрать следующую строку:
"[SentOn] >= ""10/01/98"" And [SentOn] <=""10/31/98""
(Последовательно набранные двойные кавычки указывают на внедренные двойные кавычки, которые вставлены в строку с помощью выражения Chr(34).)
Количество объединяемых критериев поиска зависит только от запросов пользователя. Имена полей для каждого типа объекта могут быть найдены в Object Browser. Выбрав желаемый объект (например, Mailltem или Contactltem), можно просмотреть список его свойств на Панели Members.
В проекте Messages при построении строки-фильтра используются значения различных элементов управления формы. Сначала проверяются значения введенных дат, а затем формируется строка фильтра:
If chkCompany.Value And Combo1.ListIndex >= 0
Then ContactName = Combo1.Text
filterString = "[SenderName] = """ & ContactName S """"
End If
If chkDate.Value Then
If filterString = "" Then
filterString = "[SentOn] >"""&_
DateFrom.Text & """ And [SentOn] <"""&_
DateTo.Text & """"
Else
filterString = filterString & " and _
[SentOn] > """ & DateFrom.Text & """ _
And [SentOn] < """ & DateTo.Text & """"
End If
End If
If filterString = "" Then
filterString = "[SentOn] > ""01/01/1980"""
End If
Обратите внимание на обилие кавычек в выражениях. Два символа двойных кавычек необходимы для вставки символа кавычки в строку. Если значение переменной ContactName равно "Sybex" то выражение:
"[SenderName] = """ & ContactName & """"
приведет к появлению следующей строки:
[SenderName] = "Sybex"
Переменная
filterstring
формируется медленно, в соответствии со значениями, введенными пользователем в окне формы. Если пользователь определяет имя, то оно присваивается свойству SenderName. Если пользователь определяет даты, то они присваиваются соответственно свойству SentOn.
Затем переменная filterstring
передается методу Find объекта AllMessages. Программа просматривает в цикле отфильтрованные сообщения, вызывая метод FindNext. После каждой итерации в окне элемента управления ListBox отображается отправитель очередного сообщения и тема. В это же самое время выбранные сообщения присоединяются к семейству Selectee/Messages:
Set thismessage = AllMessages.Find(filterString)
If thismessage Is Nothing Then
MsgBox "No messages sent in the specified interval"
' (В указанном интервале сообщений не было)
Else
List1.Clear
While Not thismessage Is Nothing
List1.AddItem thismessage.SenderName & _
Chr(9) & thismessage.Subject
SelectedMessages.Add thismessage
Set thismessage = AllMessages.FindNext
Wend
End If
Остальная часть программы проста. Если выполнить щелчок на объекте, находящемся в окне элемента управления ListBox, программа повторно вызывает из семейства SelectedMessages выбранный объект и отображает его основные поля в окне соответствующего элемента управления Label в нижней части экрана и, собственно, текст сообщения - в окне элемента управления TextBox (при этом его свойству Locked должно быть присвоено значение True, чтобы предотвратить редактирование сообщения). Ниже приведен текст программы обработчика события Click элемента управления ListBox.
Программа 14.23. Просмотр объекта
Message
Private Sub List1_Click()
Dim thismessage As Object
Dim MessageAttachments As Attachments
selectedEntry = Listl.Listlndex + 1
If selectedEntry < 1 Then Exit Sub
Set thismessage = SelectedMessages.Item(selectedEntry)
lblSender.Caption = " " & thismessage.SenderName
lblSent.Caption = " " & thismessage.SentOn
lblRecvd.Caption = " " & thismessage.ReceivedTime
txtBody.Text = " " & thismessage.Body
Set MessageAttachments = thismessage.Attachments
If MessageAttachments.Count = 0 Then
Command4.Enabled = False
Else
Command4.Enabled = True
End If
End Sub
Откройте проект Messages в Visual Basic, чтобы исследовать текст программы и ознакомиться с тем, как программа объединяет объекты папки Contacts и использует их для получения информации о E-mail-объектах из папки InBox. Теперь можно изменять программу с целью добавления большего количества критериев выбора или обеспечения возможности работы с различными папками (например, папкой OutBox или подпапками в папке InBox).
Предупреждение
В проекте Messages для отображения имен возможных отправителей почтового сообщения используется свойство контактов FullName. Если имена, использованные в папке Contacts, не соответствуют именам отправителей во входящих сообщениях, то программа не будет выбирать все сообщения, которые ожидались. Имеется много методов установления соответствия контактов и сообщений, но они требуют дополнительных затрат. Например, можно использовать адрес электронной почты каждого контакта, поскольку это общий признак, имеющийся у документа, находящегося как в папке Contacts, так и папке InBox. Но контакт может иметь несколько адресов электронной почты, поэтому следует удостовериться, что поиск выполняется по всем адресам электронной почты выбранного контакта.
VB6 в действии: проект AutoMssg
Приложение AutoMssg демонстрирует процесс создания сообщения электронной почты с помощью VB-приложения и рассылки его с помощью Outlook. Кроме того, в нем демонстрируется альтернативный способ получения информации о контактах и организации хранения этой информации. Сначала приложение отыскивает только названия компаний и отображает их в списке Companies. Пользователь может выбрать компанию и просмотреть ее контакты, используя список Contacts. Чтобы добавить новые имена в список получателей, пользователь должен выполнить двойной щелчок в окне списка Contacts. Список получателей отсортирован, но допускает повторяющиеся пункты. Это связано с тем, что человека с фамилией, например, Смит, можно обнаружить почти в каждой второй компании, поэтому удаление повторяющихся элементов на основании информации о фамилиях получателей — не самая удачная идея Вывод дополнительной информации, делающей каждый пункт списка уникальным, привел бы к загромождению экрана. Поэтому в данном проекте используется сортируемый элемент управления ListBox, в котором содержатся повторяющиеся имена, а пользователю предоставлена возможность выбора.
Программа проекта AutoMssg достаточно проста и здесь не приводится. Можно открыть проект в Visual Basic и ознакомиться с тем, как выполняется обработка сообщения.