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

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

ruster83

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#2
Вижу примерно так:

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

ruster83

Гость
#3
Вижу примерно так:

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#4
Код:
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

Гость
#5
Код:
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 - любая база, которая может быть шаблоном. Т.е. он все подряд убдет проверять....Как сделать чтобы он только по указанной мною папке пробегался...???
 

Murtas

Well-Known Member
Lotus team
11.04.2006
128
0
Minsk
#7
вариант №48 :)

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

ruster83

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

ruster83

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#11
Я имел в виду мат юзерам послал :)
А то зачем ещё письма срочно удалять?

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

ruster83

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#13
Я бы делал примерно так (в цикле):
Код:
Dim ProcessDb as New NotesDatabase("", "")
Call ProcesDb.Open(TmpDb.Server, TmpDb.Filepath)
if ProcesDb.IsOpen then
'понеслась
end if
Есть пара мест, где оптимизнуть, но лень.
 
R

ruster83

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#16
Вот-вот :)
И вообще, это дело надо запускть под тем юзером/сервером у которого есть права на mail-базы.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#17
сорь за флуд
вспоминается ролик о техподдержке, когда веб-сервер положили :)
Босс админу: "Вы что не читали мое письмо, что я Вам утром послал?"
админ, сворачивает шутер, ломится в почтовую базу босса и удаляет исходящее: "Нет, не было письма"
Босс, проверяя исходящие: "хм... нету... я был уверен, что послал"
;)
 
R

ruster83

Гость
#18
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
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#19
Код:
Set collection = ProcessDb.Search({Subject = "Test"} , Nothing,0)
Ну и переменную ProcessDb лучше вынести из цикла, а в цикле делать
Код:
Set ProcessDb = New NotesDatabase("", "")
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#20
А зачем нужна 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
 
Статус
Закрыто для дальнейших ответов.