Vbscript: Обработка непрочитанных сообщений с вложениями

Тема в разделе "Lotus - Программирование", создана пользователем lsv, 17 дек 2012.

  1. lsv

    lsv Гость

    Доброго времени суток.

    Есть скрипт по обработке сообщений на сохранение вложений с опредлённым расширением и автоматическим ответом отправителю. В скрипте есть метод Call doc.Save( False, True, True ) для того, что бы обработанные сообщения помечались прочитанными, но сделать, что бы скрипт обрабатывал только не прочитанные не удаётся. Буду благодарен за помощь в этом вопросе.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Dim Session
    Dim Maildb
    Dim vw
    Dim doc
    Dim Item
    Dim x
    Set Session = CreateObject("Lotus.NotesSession")
    Call Session.Initialize("password")
    Set Maildb = Session.GetDatabase("SERVER", "mail.nsf")
    If Not Maildb.IsOpen = True Then
    Call Maildb.Open
    End If
    Set vw = Maildb.GetView("($inbox)")
    With vw
    x = 0
    ReDim LmailID(x)
    ReDim HasAttach(x)
    Set doc = .GetFirstDocument
    Set Item = doc.GetFirstItem("Body")
    Do
    If Item.Type = RICHTEXT Then - это проверка на непрочитанное сообщение
    fileNames = Session.Evaluate("@AttachmentNames", doc)
    For Each Filename In fileNames
    If Filename <> "" Then
    If Right(Filename, 3) = "bch" Then
    Call doc.Save( False, True, True )
    Set NotesEmbeddedObject = doc.GetAttachment(Filename)
    NotesEmbeddedObject.ExtractFile ("C:\" + Filename)
    Set reply = doc.CreateReplyMessage( False )
    Call reply.replaceItemValue("Subject", "DONE" + subject)
    Call reply.Send( False )
    Set nextDoc = .GetNextDocument(doc)
    Set doc = nextDoc
    End If
    End If
    Next
    End If
    x = x + 1
    ReDim Preserve LmailID(x)
    Set doc = .GetNextDocument(doc)
    Wscript.Sleep 500
    Loop Until doc Is Nothing
    End With
    Set Session = Nothing
    Set vw = Nothing
    Set doc = Nothing
    Set Item = Nothing
    Set Maildb = Nothing
     
  2. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    Код (Text):
    Dim session As New NotesSession
    Dim dbCur As NotesDatabase
    Dim coll As NotesDocumentCollection

    Set dbCur = session.CurrentDatabase ' ссылка на текущую БД
    Set coll = dbCur.GetAllUnreadDocuments ' коллекция непрочтенных док для текущего пользователя
    GetAllUnreadDocuments - > http://publib.boulder.ibm.com/infocenter/d...TS_DB_JAVA.html

    P.S. Сейчас тебе VladSh ввалит "минусов", и за spoiler, и за тему :)
     
  3. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    lsv
    А, кстати, да :D
     
  4. lsv

    lsv Гость

    скрипт написан на основе лотус скрипта.
    к сожалению, я не большой специалист по написанию программ, поэтому и обращаюсь за помощью.
    GetAllUnreadDocuments - этот метод я тоже пытался использовать: "Object doesnt support this property or method 'GetAllUnreadDocuments '"
    Во-вторых, в vbscript "As" в "Dim" не используется.
     
  5. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    А почему через OLE? Просто не знаете как правильно?
    Ваша задача касается только одной почтовой базы или всех баз пользователей?

    Ниже рассказываю вариант, предполагающий, что с административной точки зрения вам разрешено, то что вы хотите сделать :D
    В Лотусе есть свой собственный язык, похожий на VB. Он называется LotusScript. Программирование на нем осуществляется в Lotus Domino Designer. Вам нужно его установить, если его нет.

    Открываете почтовую базу в Lotus Domino Designer.
    Создаете нового агента.
    В свойствах агента указываете, что он запускается по событию After new mail has arrived
    Переносите в агента свой код.
    Даете тип в Dim переменным.
    Код
    Код (LotusScript):
    Set Session = CreateObject("Lotus.NotesSession")
    Call Session.Initialize("password")
    Set Maildb = Session.GetDatabase("SERVER", "mail.nsf")
    If Not Maildb.IsOpen = True Then
    Call Maildb.Open
    End If
    Set vw = Maildb.GetView("($inbox)")
    With vw
    Заменяете на
    Код (LotusScript):
    Dim newDocCol as NotesDocumentCollection
    set Session = new NotesSession
    set mailDb = Session.CurrentDatabase
    set newDocCol = mailDb.UnprocessedDocuments ' отобрали все новые документы
    With newDocCol
    Также рекомендуется после обработкой документа в какое-нибудь поле сохранять признак обработки, а перед обработкой наличие этого признака проверять, ибо случается, что при следующем запуске документ опять попал в коллекцию новопришедших.

    Теперь о правах: вам нужно к почтовой базе иметь права Designer или Manager. Также вам нужно иметь разрешение на запуск агентов на сервере. Если администратор отказывается дать вам такие права, то он должен будет подписать агента
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    хм... lsv у вас стороннее приложение на VB.NET ?
    посмотрите эту ссылку: send with MsVB.net
     
  7. lsv

    lsv Гость

    у меня обычный .vbs скрипт. отправка сообщений в скрипте успешно работает. спасибо за ссылку.

    есть др. проблема: у меня в Lotus подключено два ящика. Когда я посылаю писмо с вложением сам на себя (в скрипте прописываю сервер и nsf первого пользователя) - autoreply срабатывает. Если от первого пользователя на второго, со второго autoreply не срабатывает (при этом в скрипте прописываю сервер и nsf второго пользователя, т.к. ответ на первого пользователя должен идти от второго):
    Notes error: You cannot update or delete the document(s) since you are not listed as an allowable Author for this document.
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Это значит второй пользователь не автор для письма...
    Скрипты отправки писем посмотреть можно?
     
  9. lsv

    lsv Гость

    С vbs и groovy скриптами отдалённо знаком. С LotusScript и Domino Designer нет. В работе понадобилось оптимизировать процесс, поэтому пытаюсь применить знания.
    Мне создали два почтовых ящика: один - это моя рабочая почта, второй - это специальный ящик на который будут приходить письма с вложениями и именно этот ящик должен обрабатывать мой скрипт.

    О существовании такого языка я знаю, но боюсь, за любые попытки установки Designer, редактировании своего профиля, создание агента и т.п. меня не похвалят. Банк, однако. Но, права локального админа на ком-ре есть.

    Код (Text):
    Set Session = CreateObject("Lotus.NotesSession")
    Call Session.Initialize("pass")
    Set Maildb = Session.GetDatabase("server", "user1.nsf")
    Set view = Maildb.UnprocessedDocuments
    If Not Maildb.IsOpen = True Then
    Call Maildb.Open
    End If
    With view
    ...
    Подредактировал скрипт.
    Ошибка: Not implemented
    Code: 8004112B
    Source: NotesDatabase
    в строке Set view = Maildb.UnprocessedDocuments

    это делается методом Call doc.Save( False, False, True ) в скрипте. Обработанное письмо с вложением помечается прочитанным.

    поэтому надо использовать метод GetAllUnreadDocuments, но, как я и писал, там ошибка "Object doesnt support this property or method 'GetAllUnreadDocuments'

    Как я могу узнать свои права на сервере?

    Извините, что задаю так много вопросов, но буду благодарен за любую помощь.
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Код (LotusScript):
    level% = notesDatabase.CurrentAccessLevel ' вернет цифру
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Что значат цифры</div></div><div class="sp-body"><div class="sp-content">ACLLEVEL_NOACCESS (0)
    ACLLEVEL_DEPOSITOR (1)
    ACLLEVEL_READER (2)
    ACLLEVEL_AUTHOR (3)
    ACLLEVEL_EDITOR (4)
    ACLLEVEL_DESIGNER (5)
    ACLLEVEL_MANAGER (6)

    По идее должно вернуть 4
    Ссылка поможет немного, хотя бы методы...
    Help Designer on-line 8.5
    Версия лотуса какая?
     
  11. lsv

    lsv Гость

    весь код скрипта в шапке. на всякий случай:
    Код (Text):
    'Set reply = doc.CreateReplyMessage( False )
    'Call reply.replaceItemValue("Subject", "готово" + subject)
    'Call reply.Send( False )
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Погоди... 2 почтовых ящика. Две учетных записи?
    Надо узнать у того, кто ящики заводил: "Какой доступ к ним". По-умолчанию Editor должен быть.
    Из клиента это можно проверить так: Правой кнопкой по иконке базы -> Application(Приложение) -> Access Control(список доступа)
    Далее ищешь свою учетку и смотришь справа сверху доступ.
     
  13. lsv

    lsv Гость

    Access Control - Editor - установлен для только для пользователя имя которго соотвтетсвутет имени файла nsf, оно отлично от первого пользователя
    Вручную Reply со второго почтового ящика на первый отправляется


    Добавлено:
    8.5
     
  14. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    "но сделать, что бы скрипт обрабатывал только не прочитанные не удаётся. "
    повесить на агент с тригером по приходу почты
     
  15. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Написать скрипт, объяснить проблему админам, дать им код и попросить, чтобы включили код в шаблон почты. Гарантии, естессно, нет, но это правильный путь.
     
  16. lsv

    lsv Гость

    к сожалению не удалось достучаться до админов. спасибо за рекомендации.
    в скрипте так и не удалось реализовать обработку только не прочитанных сообщений, возможна ли реализация такой обработки на основе vbs-скрипта или этот метод будет работать только на LotusScript?
     
  17. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    По идее, если Клиент открыт, то vbs должен отработать также, как и код на LS.
     
  18. lsv

    lsv Гость

    если на раб. станции lotus не установлен, то способа установить соединение с базой для последующей работы со вложениями нет?
    у меня открыт доступ на Design Folder. С помощью данной опции можно настроить правила обработки вложений?
     
  19. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Есть, по COM, т.е. точно также, как вы и делаете.
    Но через COM многие методы не работают. Вернее они изначально не предназначались для работы через COM. В хэлпе по методам смотрите, если там вверху в перечне есть "COM", значит должно работать.

    По 2-му предложению ничего не понял.
     
  20. lsv

    lsv Гость

    если на раб. станции lotus не установлен, то способа установить соединение с базой для последующей работы со вложениями нет?
    у меня открыт доступ на Design Folder. С помощью данной опции можно настроить правила обработки вложений?
     
Загрузка...
Похожие Темы - Vbscript Обработка непрочитанных
  1. mokritskayana
    Ответов:
    0
    Просмотров:
    1.548
  2. kolka
    Ответов:
    6
    Просмотров:
    253
  3. anna
    Ответов:
    9
    Просмотров:
    884
  4. FaRReLL
    Ответов:
    0
    Просмотров:
    868
  5. crow1986
    Ответов:
    8
    Просмотров:
    1.874

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