• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Список всех баз почты

  • Автор темы FilFly
  • Дата начала
F

FilFly

Помогите плиз советом! Есть такая задача получать список баз ПОЧТЫ (почта храниться в дата папке mail сервера) при выборе сервера и запускать по ним агент...
Для этого я создал документ с настроичными полями агента...
Проблема с получением списка баз.. пока получаю этот список с помощью явного указания пути к файлам почты(в поле path) т.е. :
path=Cstr(doc.path(0)) & "\*.*"
Fname=Dir(path,0)
Do While Fname<>""
Print Fname
Set Db = ss.GetDatabase("имя сервера", "mail\" +Fname, False)
If Db Is Nothing Then
Messagebox "NetA Bd", , "BaDDDddd"
Else
If DB.IsOpen Then
Messagebox "Ura" & db.FileName,, "URaaaa"
End If
End If

Fname=Dir()
Loop

Этот способ не очень т.к. серверов более 10-ти ...
Вопрос а можно как нибудь получать список баз при выборе сервера и по нему делать цикл...

Есть мысль делать это через бд Catalog там искать все документы у которых поле Pathname содержить mail\
И от туда забирать название базы и уже методом GetDatabase делать с этой базой что нужно...

Может есть еще более простые решения??? Был бы признателен тем кто подскажет более простой способ!!
 
N

nvyush

Обычно для этого используют класс NotesDbDirectory
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
способы одно, а цель этого действа?
-дизайн менять - есть процесс специальный (выкладываем нужный темплэйт на сервера)
-писать/читать ноты - роутер для этого...
 
F

FilFly

способы одно, а цель этого действа?
Цель почистить уведомлялки поступающие в почту, при этом нужные доки не трогать ...
Я все же сделал по совету nvy с помощью класса NotesDbDirectory:

Set Db2= dbdir.GetFirstDatabase(DATABASE)
Do While Not (Db2 Is Nothing)
If db2.Open(doc.servername(0), db2.FilePath) Then

pathDb= Mid$(Db2.FilePath, 1, 5)
If Strcompare(pathDb, "mail\",0) = 0 Then ...
Else (а иначе следующий документ)
Goto nexto
End If
End If
Nexto:
Set Db2=dbdir.GetNextDatabase

Не знаю на сколько правильно но протестил.. вроде пока ошибок нет ))
 
N

nvyush

FilFly
Неясен смысл строки If db2.Open(doc.servername(0), db2.FilePath) Then
Свойство базы FilePath доступно и без открытия базы — зачем тратить на это время/ресурсы? И ни к чему в цикле всё время получать значение поля документа — лучше перед циклом сохранить его в переменной.
 
F

FilFly

FilFly
Неясен смысл строки If db2.Open(doc.servername(0), db2.FilePath) Then
Свойство базы FilePath доступно и без открытия базы
Хм.. да спасибо можно сначала проверку делать а потом открывать базу...
Навыков нет писать заранее правильный код )) поэтому решил просто двух зайцев убить.. прочитал
что метод GetNextDatabase базу не открывает, поэтому вставил If db2.Open... т.к. базу то все равно надо открыть - мне из нее еще надо коллекцию удаляемых документов получать


А по значению поля документа pathDb= Mid$(Db2.FilePath, 1, 5) он сравнивает лежит ли эта база в папке mail\ т.е. как я понимаю перед циклом не сохранит, т.к. это будет путь от старой базы
 
N

nvyush

А по значению поля документа pathDb= Mid$(Db2.FilePath, 1, 5) он сравнивает лежит ли эта база в папке mail\ т.е. как я понимаю перед циклом не сохранит, т.к. это будет путь от старой базы
Я имел ввиду doc.servername(0).
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
и у базы есть св-во - имя темплэйта
вот по нему и надо ориентироваться, а не по пути иимени базы
Код:
Function GetDbByTemplate(template As String) As NotesDatabase
On Error Goto ErrH
Dim directory As NotesDbDirectory
Dim doc As NotesDocument
Set directory = New NotesDbDirectory( db.Server )
Dim tmp As NotesDatabase
Set tmp = directory.GetFirstDatabase( DATABASE )
While Not ( tmp Is Nothing )
If ( tmp.DesignTemplateName = template ) Then
If Not tmp.Open( "", "" ) Then Exit Function
Set GetDbByTemplate=tmp
Exit Function
End If
Set tmp = directory.GetNextDatabase
Wend
Quit:
Exit Function
ErrH:
Error Err, RaiseError
End Function

Добавлено: в коде глобальная db и выход по нахождению шаблона/ошибке открытия (из либы выдернул)
меняйте сообразно целям
 
F

FilFly

и у базы есть св-во - имя темплэйта
вот по нему и надо ориентироваться, а не по пути иимени базы

Спасибо за этот вариант, но просто помню что у нас несколько шаблонов почты(и вдруг у кого-нить еще и каие нить старые шаблоны остались) .. поэтому решил все же по пути
 
N

nvyush

lmike
Красиво, но не всегда применимо. Бывает, что у почтовых баз разные шаблоны (например, у одних — русский, у других — английский)
 
F

FilFly

Спасибо БОЛЬШОЕ за конструктивные советы! Тема закрыта
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
а для схожих вариантов - Like
для точных Not IsNull(ArrayGetIndex(...,...,5))
 
Мы в соцсетях:

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