Как в OUTLOOK отследить отравлено ли письмо?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
191181
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 06.10.2003 (Пн) 16:30

Как в OUTLOOK отследить отравлено ли письмо?

Сообщение 191181 » 12.11.2003 (Ср) 21:45

Смысл такой, что я создал mailitem

mailitem.display
Как сделать задержку, что письмо либо послано, либо нет?
WhileMailItem.Sent=False(True) - не получается
Wend
****
прочий код
****

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.11.2003 (Чт) 8:47

Обрабатывай событие Application_ItemSend

191181
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 06.10.2003 (Пн) 16:30

Сообщение 191181 » 13.11.2003 (Чт) 10:55

Неа, так не получается, т.к. я сейчас пишу под программный продукт(со встроенным VBScript).
Там сам код VBScript-a небольшой.
Я где-то видел (не помню где), что делали зацикливание типа

While MailItem.что-то там
Wend

Может знаете? :cry:

P.S. Или как обработать события Application.ItemSend на VBScript? - нежелательно.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 13.11.2003 (Чт) 14:07

191181 писал(а):WhileMailItem.Sent=False(True) - не получается


Почему ты применяешь метод Display - ты хочешь открыть письмо и ждать какое-то время реакции от юзера? Или ты хотел именно отослать письмо - тогда MailItem.Send должен был стоять.

Ты собственно задержку в цикл вставил? Не получается - это что значит? Что происходит-то?

Я все это спрашиваю, потому что идея-то вроде правильная - должно было получиться.

191181
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 06.10.2003 (Пн) 16:30

Сообщение 191181 » 13.11.2003 (Чт) 14:21

Смысл такой:
Создается сообщение, выводится на экран.

Далее пользователь решает отправить его или нет! (опять же если делать mailitem.send, то вывалится окошко "программа пытается отправить сообщение....."), поэтому я использую ".Display"

Если пользователь оправил сообщение (кнопка "Отправить"), то мне надо выполнять далее один код, Если же пользователь не стал отправлять письмо (просто его закрыл), то должен выполняться другой код.

Но после выполнения стороки "mailitem.Display", программа идет дальше. И как раз на это мне надо поставить задержку, что типа "парень, ты отправил или нет?". - Я где-то видел код, который прогоняет впустую цикл while.
Или есть еще какие-нибудь предложения?


P.S. вот я и спрашиваю, какую задержку ставить?
Если я пишу While MailItem.Sent = False, то вываливается ошибка "данный объект был перенесён в другое место" - насколько я понимаю, просто раньше была ссылка на "черновики или создание", а потом ссылка изменилать на "отправленные".
GetEntryById - нельзя использовать. (а если пользователь вообще возьмет и закроет письмо без сохранения).

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 13.11.2003 (Чт) 16:13

Понятно. Нет, других предложений у меня нет.

MailItem.Sent выдает ошибку "the item has been moved or deleted", если письмо было отослано. В остальных случаях (сохранили, закрыли) продолжает выдавать false.

так что пиши типа

while not MailItem.Sent and (еще ждем)
подождать
посмотреть, не вываливалась ли наша ошибка (если да, то вывалиться из цикла)
wend
идем дальше

Может, есть и более красивое решение - я в это верю :)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 13.11.2003 (Чт) 17:37

Есть красивое решение!
Можно подключиться к событиям от объекта MailItem.
А инспектор будет наблюдать за айтемом, пока тот не будет закрыт или отослан юзером. Сохраняли ли его - скажет переменная bSaved.

Код: Выделить всё
Sub MyItem_Send(bCancel)
    bSent = true
End Sub

Sub MyItem_Write(bCancel)
    bSaved = true
End Sub


Dim bSend, bWrite
Dim myOlApp, myItem
Dim pInspector

Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)

myItem.Subject = "test"
Set pInspector = myItem.GetInspector
wscript.connectobject myItem, "myItem_"

bSent = False
bSaved = False

myItem.Display
While pInspector.CurrentItem Is myItem
    WScript.Sleep 100
Wend
if bSent then
    msgbox "Sent!"
else
    if bWrite then
        msgbox "Saved!"
    else
        msgbox "Closed!"
    end if
end if


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 13

    TopList