Удаление письма из базы

  • Автор темы ruster83
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

ruster83

Нужен скрипт удалаяющий из почтовой базы каждого пользователя одно письмо с определенной темой, если таковое есть в почтовой базе,
базы находятса на сервере в директории mail
 
O

Omh

Вижу примерно так:

1. Агент подписанный сервером (что был доступ к mail базам)
2. NotesDbDirectory (перебор баз)
3. Search или какой-нибудь GetDocumentByKey (для поиска)
4. Собственно удаление
 
R

ruster83

Вижу примерно так:

1. Агент подписанный сервером (что был доступ к mail базам)
2. NotesDbDirectory (перебор баз)
3. Search или какой-нибудь GetDocumentByKey (для поиска)
4. Собственно удаление

Не могли бы подсказать,как реализовать переборку баз с NotesDbDirectory (пункт 2). Это наиболее сложная для меня задача...
 
O

Omh

Код:
Dim NotesDir As New NotesDbDirectory(MailServerName)
Dim TmpDb As NotesDatabase
Set TmpDb = NotesDir.GetFirstDatabase(TEMPLATE_CANDIDATE)
While Not TmpDb Is Nothing
'тут делаем проверку путей, поиск и прочее
Set TmpDb = NotesDir.GetNextDatabase
Wend
off: давай на "ты"
 
R

ruster83

Код:
Dim NotesDir As New NotesDbDirectory(MailServerName)
Dim TmpDb As NotesDatabase
Set TmpDb = NotesDir.GetFirstDatabase(TEMPLATE_CANDIDATE)
While Not TmpDb Is Nothing
'тут делаем проверку путей, поиск и прочее
Set TmpDb = NotesDir.GetNextDatabase
Wend
off: давай на "ты"
Хорошо буду на "ты". Я не знаю как сделать чтобы проверял только папку mail котрая на сервере. Ведь TEMPLATE_CANDIDATE - любая база, которая может быть шаблоном. Т.е. он все подряд убдет проверять....Как сделать чтобы он только по указанной мною папке пробегался...???
 
O

Omh

Код:
if Lcase(Left(TmpDb.Filepath, 4)) = "mail" then
'тра-ля-ля
end if
Ну или что-то в этом роде :)
 

Murtas

Green Team
11.04.2006
137
1
BIT
5
вариант №48 :)

бегаем по народу из адресной книжки - у персоны есть поле "Mail file"
 
R

ruster83

Так...а как теперь найти документ если известно только поле....???
 
R

ruster83

Нет матов не слал, это у меня самого привычка такая точки ставить в сообщениях. Как теперь поиск осущетсвить в полученных базах нужного документа,а???
 
O

Omh

Я имел в виду мат юзерам послал :)
А то зачем ещё письма срочно удалять?

Ну найти можно примерно так (этот скрипт внутри цикла, перебирающего базы):
Код:
Dim Dc As NotesDocumentCollection
Set Dc = TmpDb.Search({Subject = "матный сабжегд"}, Nothing, 0)
if Dc.Count > 0 then Call Dc.RemoveAll(True)
Вроде, в мейл базах софтделишены по умолчанию включены, поэтому может понадобится перебрать найденную коллекцию и на каждый док наускать
Код:
RemovePermanently(True)
 
R

ruster83

пишет вот такую фиговину: Database Ruslan!!mail\abon.nsf has not been opened yet. Что это значит??? Сервер называется Ruslan
 
O

Omh

Я бы делал примерно так (в цикле):
Код:
Dim ProcessDb as New NotesDatabase("", "")
Call ProcesDb.Open(TmpDb.Server, TmpDb.Filepath)
if ProcesDb.IsOpen then
'понеслась
end if
Есть пара мест, где оптимизнуть, но лень.
 
R

ruster83

Что то все ранво не работает :) Теперь пишет Variant does not contain the object
 
O

Omh

Вот-вот :)
И вообще, это дело надо запускть под тем юзером/сервером у которого есть права на mail-базы.
 
A

Akupaka

сорь за флуд
вспоминается ролик о техподдержке, когда веб-сервер положили :)
Босс админу: "Вы что не читали мое письмо, что я Вам утром послал?"
админ, сворачивает шутер, ломится в почтовую базу босса и удаляет исходящее: "Нет, не было письма"
Босс, проверяя исходящие: "хм... нету... я был уверен, что послал"
;)
 
R

ruster83

Sub Click(Source As Button)
Dim directory As NotesDbDirectory
Dim db As NotesDatabase
server$ = "Ruslan"
Set directory = New NotesDbDirectory( server$ )
dbType% = DATABASE'TEMPLATE_CANDIDATE
Set db = directory.GetFirstDatabase( dbType% )
counter% = 0
While Not ( db Is Nothing )
counter% = counter% + 1
Set db = directory.GetNextDatabase
If Cstr(Lcase(Left(db.Filepath, 4))) = "mail" Then
Messagebox db.FilePath,,server$
Dim ProcessDb As New NotesDatabase("", "")
Call ProcessDb.Open(db.Server, db.Filepath)
If ProcesDb.IsOpen Then
Dim collection As NotesDocumentCollection
Set collection = db.Search({Subject = "Test"} , Nothing,0)
If collection.Count > 0 Then
Print "Tete" ' Если все ништяк...
End If
End If
End If
Wend
End Sub
 
O

Omh

Код:
Set collection = ProcessDb.Search({Subject = "Test"} , Nothing,0)
Ну и переменную ProcessDb лучше вынести из цикла, а в цикле делать
Код:
Set ProcessDb = New NotesDatabase("", "")
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
А зачем нужна ProcessDb, если есть db?
Заменить
Код:
Dim ProcessDb As New NotesDatabase("", "")
Call ProcessDb.Open(db.Server, db.Filepath)
If ProcesDb.IsOpen Then
на
Код:
Call db.Open("", "")
If db.IsOpen Then
А можно сразу на:
Код:
If db.Open("", "") Then
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!