прием писем в указанную папку вместо "входящие"

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

  1. nadezdaMP

    nadezdaMP Гость

    Добрый день всем!
    Посоветуйте пожалуйста, как решить следующую задачку:

    Пользователю приходят по почте сообщения (письма, уведомления, системные сообщения и тп) автоматически в папку - Входящие письма.
    Как сделать так, чтобы письма, например, типа уведомления у пользователя - приходили (отображались) в отдельную папку - Уведомления?
     
  2. Murat

    Murat Гость

    в почтовых правилах можно прописать
     
  3. nadezdaMP

    nadezdaMP Гость

    да, но тогда придется прописывать почтовое правило у каждого клиента, а это не так удобно, особенно если их под 500 :)
    как сделать это программно, чтобы для всех пользователей сразу? :)
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    В почтовом шаблоне пишем агента, первая закладка свойств, раздел Runtime: Trigger = On event, Before new mail arrives. Накатываем шаблон на почтовые файлы. Осторожно! Такой агент должен быть один в базе! Подробнее см. справку.
     
  5. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    С правилами можно так: делаешь правило в своей почте, Set newNotesDocument = notesDocument.CopyToDatabase(почтовая бд пользователя)
    Call newNotesDocument .PutInFolder("Rules"). хз только как работать будет, у меня работало...осталась проблема создать программно папку)
     
  6. nadezdaMP

    nadezdaMP Гость

    Почему такой агент должен быть один? :)
    работаю над кодом агента! Если у кого то уже есть похожий скрипт, поделитесь пожалуйста! :)
     
  7. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Что-б приходили - никак. Это в пузе у router-а прописано: если в базе есть фолдер $Inbox, то класть письма туда.
    ПЕРЕложить от туда потом - можно...
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    1) поиск в справке по фразе "Triggering an agent on an event" дает: "Before new mail arrives... Note that this option is limited to one agent per database"

    2)
    [codebox]Sub Initialize
    Dim s As NotesSession
    Dim doc As NotesDocument
    Dim item As notesitem
    Set s = New NotesSession
    Set doc=s.documentcontext
    Set item=doc.GetFirstItem("Subject")
    If <условие1> Then
    Call doc.PutInFolder(<нужная папка1>)
    doc.RemoveFromFolder("($Inbox)")
    ElseIf <условие2> Then
    Call doc.PutInFolder(<нужная папка2>)
    doc.RemoveFromFolder("($Inbox)")
    End If
    End Sub
    [/codebox]
     
  9. nadezdaMP

    nadezdaMP Гость

    Перемещаю все что не является письмом, ответом на письмо, или задачей. По идее должны перемещаться всякого рода уведомления и системные сообщения. Вот что у меня получилось :)

    Sub Initialize
    Dim session As NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim workspace As New NotesUIWorkspace
    Dim dform As Variant
    Dim docform As String
    Dim cond As Boolean

    Set session = New NotesSession
    Set db = session.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set doc = collection.GetFirstDocument()

    While Not(doc Is Nothing)
    dform = doc.GetItemValue( "Form" )
    docform = dform(0)
    If docform = "Memo" Or docform = "Task" Or docform = "Reply" Then
    cond = True
    Else
    cond = False
    End If
    If Not(cond) Then
    Call doc.PutInFolder _
    ( "($Reports)",True )
    Call doc.RemoveFromFolder( "($Inbox)" )
    End If
    Set doc = collection.GetNextDocument(doc)
    Wend
    Call workspace.ViewRefresh
    End Sub

    если кто либо дополнит, или оптимизирует код, буду признательна :)
     
  10. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Давай
    Код (Text):
    dform = doc.GetItemValue( "Form" )
    docform = dform(0)
    заменим на
    Код (Text):
    dform = doc.GetItemValue( "Form" )(0)
    Заодно и от лишней переменной избавимся...

    Мне кажется где-то должно быть
    Код (Text):
    Call notesSession.UpdateProcessedDoc( notesDocument )
    , не?

    Ещё мне кажется, что
    Код (Text):
    Call workspace.ViewRefresh
    тут лишнее.
    Это же серверный агент, что ему там рефрешить?
     
  11. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    наличие документа в папке "(Rules)" не говорит о том, что правило будет работать,
    при активации правил информация из них записывается в спец.фомате в профиль CalendarProfile под именами Filter_FormulaX и уже эта информация будет использоваться роутером



    а это касательно Pre-delivery почтовых агентов
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Все, что с связано UI здесь лишнее
    Если агент типа Before new mail arrives, то он отрабатывает для КАЖДОГО входящего документа, который может быть получен так:
    Set doc=s.documentcontext
    Соответственно перебор коллекции документов явно лишний
     
  13. nadezdaMP

    nadezdaMP Гость

    Спасибо! Много новой полезной информации! :)

    Вопрос: как сделать так, чтобы данный агент вызывался по желанию пользователя?
    В папке Входящие по команде Сервис -> Параметры вызывается окно настроек (Почта -> Основные).
    Можно ли туда добавить свою настройку?

    во вкладке Почта - Общие сделала checkbox для задания пользователем по желанию сортировки уведомлений.
    Где именно и возможно ли обработать: если checkbox установлен - вызвать агента, если нет - не вызывать?

    или все настройки уже жестко прописаны, и свою не добавить???
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если по желанию пользователя - то лучше пусть каждый себе настраивает почтовые правила. Агенты типа "Befor new mail errives" "тяжело" обрабатываеются сервером, поэтому должны быть единственными на базу и очень короткими.
    Если очень нужно поместить в настройку, то агент переделать на тип "After new mail errives" с перебором UnprocessedDocuments, добавить в него открытие профильного документа и анализ соответствующего поля чекбокса
     
  15. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Кстати, коллеги, поделитесь, пожалуйста, опытом: кто-нибудь массово использует "Before new mail"-агентов - скажем, для сотен пользователей?
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    У нас спам-фильтр добавляет в тему спам-писем строку типа "SPAM? ". Агенты "Before new mail" в почтовых базах пользователей анализируют тему входящих писем на предмет наличия данной подстроки и при её обнаружении перекладывают письма из папки "Входящие" в папку "Спам", а там уже пользователи с ними сами разбираются. Пользователей (почтовых баз) ~ 1000.
     
  17. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    кстати я конечно могу ошибаться или что-то путать
    но вроде когда разбирался с 8-кой то если в специальное поле (Move2Folder - что-то типа так) вписать название папки, то 8-й роутер сразу ложит письмо в конкретную папку, это было описано как одно из новшеств при обьявлении таких фич как "отзыв почты" или отказ от использования агента Out-of-Office в пользу отдельного сервиса на домино
     
Загрузка...

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