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

Тема в разделе "Lotus - Программирование", создана пользователем ruster83, 14 апр 2009.

Статус темы:
Закрыта.
  1. ruster83

    ruster83 Гость

    Репутация:
    0
    Нужен скрипт удалаяющий из почтовой базы каждого пользователя одно письмо с определенной темой, если таковое есть в почтовой базе,
    базы находятса на сервере в директории mail
     
  2. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Вижу примерно так:

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

    ruster83 Гость

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

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    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: давай на "ты"
     
  5. ruster83

    ruster83 Гость

    Репутация:
    0
    Хорошо буду на "ты". Я не знаю как сделать чтобы проверял только папку mail котрая на сервере. Ведь TEMPLATE_CANDIDATE - любая база, которая может быть шаблоном. Т.е. он все подряд убдет проверять....Как сделать чтобы он только по указанной мною папке пробегался...???
     
  6. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    if Lcase(Left(TmpDb.Filepath, 4)) = "mail" then
    'тра-ля-ля
    end if
    Ну или что-то в этом роде :)
     
  7. Murtas

    Murtas Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    11 апр 2006
    Сообщения:
    127
    Симпатии:
    0
    вариант №48 :)

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

    ruster83 Гость

    Репутация:
    0
    Так...а как теперь найти документ если известно только поле....???
     
  9. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Murtas, можно и так :)
    ruster83, мат послал? ;)
     
  10. ruster83

    ruster83 Гость

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

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я имел в виду мат юзерам послал :)
    А то зачем ещё письма срочно удалять?

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

    ruster83 Гость

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

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Я бы делал примерно так (в цикле):
    Код (Text):
    Dim ProcessDb as New NotesDatabase("", "")
    Call ProcesDb.Open(TmpDb.Server, TmpDb.Filepath)
    if ProcesDb.IsOpen then
    'понеслась
    end if
    Есть пара мест, где оптимизнуть, но лень.
     
  14. ruster83

    ruster83 Гость

    Репутация:
    0
    Что то все ранво не работает :) Теперь пишет Variant does not contain the object
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    ruster83, весь код покажи
     
  16. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Вот-вот :)
    И вообще, это дело надо запускть под тем юзером/сервером у которого есть права на mail-базы.
     
  17. Akupaka

    Akupaka А че я?.. О.о

    Репутация:
    0
    Регистрация:
    4 окт 2007
    Сообщения:
    3.360
    Симпатии:
    2
    сорь за флуд
    вспоминается ролик о техподдержке, когда веб-сервер положили :)
    Босс админу: "Вы что не читали мое письмо, что я Вам утром послал?"
    админ, сворачивает шутер, ломится в почтовую базу босса и удаляет исходящее: "Нет, не было письма"
    Босс, проверяя исходящие: "хм... нету... я был уверен, что послал"
    ;)
     
  18. ruster83

    ruster83 Гость

    Репутация:
    0
    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
     
  19. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Set collection = ProcessDb.Search({Subject = "Test"} , Nothing,0)
    Ну и переменную ProcessDb лучше вынести из цикла, а в цикле делать
    Код (Text):
    Set ProcessDb = New NotesDatabase("", "")
     
  20. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А зачем нужна ProcessDb, если есть db?
    Заменить
    Код (Text):
    Dim ProcessDb As New NotesDatabase("", "")
    Call ProcessDb.Open(db.Server, db.Filepath)
    If ProcesDb.IsOpen Then
    на
    Код (Text):
    Call db.Open("", "")
    If db.IsOpen Then
    А можно сразу на:
    Код (Text):
    If db.Open("", "") Then
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей