Форум продуктов IBM Lotus
Продукты IBM Lotus => IBM Lotus Notes & Domino => Тема начата: ol_x от 20 Июнь 2012, 15:47:12
-
Доброго всем времени суток!
Как реализовать теневое копирование отправленного письма. Посмотрел simple action, там отрабатывается событие при получении письма, при отправке никаких событий нет.
Мысли были переписать код "Отправить"
MEMO_SEND:="1024";
FIELD ActionInProgress:=MEMO_SEND;
@If(@Command([FileSave]);@Command([FileCloseWindow]);@Return(""))
но так и не получилось вернуть значение body
Направьте на правильный путь плиз.
-
Добрый день!
Какая перед вами стоит задача? Вам нужно, чтобы все отправляемые письма пользователей копировались в какую-то базу?
-
Не совсем так... все письма и так заносятся в журнал. Задача стоит такая: влепить теневую отправку почты недобросовестных сотрудников на определенный ящик для дальнейшего анализа, чтобы они этого не видели и не знали об этом.
-
Попробуйте воспользоваться серверными почтовыми правилами
-
Серверные почтовые правила отрабатывают только следующие действия:
- занести это сообщение в журнал
- переместить в базу данных
- не принимать сообщение
- изменить состояние маршрутизации
- остановить обработку
Второе действия бы подошло, если бы письмо еще уходило по своему прямому адресу, а не тупо перемещало в другую базу.
-
А если выбрать второй пункт и указать две базы: базу куда копировать и серверный mail.box?
-
Он не копирует, а перемещает. Попробовал, не то.
-
Нашел подходящий кусок кода... только клиент ругается, что переменная не определена, что очень странно, ибо код брался с документации лотусни.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument, doc2 As NotesDocument
Dim item As NotesItem
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set db = session.CurrentDatabase
Set doc2 = New NotesDocument(db)
Set item = doc.GetFirstItem("Subject")
Call item.CopyItemToDocument(doc2, "Subject")
Set item = doc.GetFirstItem("Body")
Call item.CopyItemToDocument(doc2, "Body") 'ругается в этом месте
Call doc2.Send(True, "Marketing")
End Sub
В принципе, если бы был рабочий, на его основе можно было переделать Lotus Formula (кода "Отправить") в LotusScript, добавив в этот код сохранение и закрытие, чтобы юзверь не отличил на глаз изменения в действиях при отправке письма.
-
Можно в почтовом шаблоне для кнопок отправки добавить @MailSend("Marketing")
-
В таком случае письмо улетает пустым: без темы и без тела...
-
Ок, можно углубиться и добавить код в библиотеку отправки.
Для этого, в скриптовой библиотеке CoreEmailClasses, в функции QuerySave класса UIMemoDocument
в начале функции после строки
On Error Goto TRAP
добавить код:
Dim mdoc As NotesDocument
Set mdoc = Me.m_db.Createdocument()
Call mdoc.Replaceitemvalue("SendTo", "Marketing")
Call mdoc.Replaceitemvalue("Body", Me.m_noteUIMemo.Fieldgettext("Body"))
Call mdoc.Replaceitemvalue("Subject", Me.m_noteUIMemo.Fieldgettext("Subject"))
Call mdoc.Send(False)
-
Ругалось на m_db. Сделал вот так:
Set mdoc = Me.m_session.Currentdatabase.Createdocument()
Все классно! Но если есть вложения в письма, они не прилетают.
-
Set mdoc = Me.m_session.Currentdatabase.Createdocument()
Call Me.m_noteUIMemo.Document.Copyallitems(mdoc, True)
Call mdoc.Replaceitemvalue("Body", Me.m_noteUIMemo.Fieldgettext("Body"))
Call mdoc.Replaceitemvalue("CopyTo", "")
Call mdoc.Replaceitemvalue("BlindCopyTo", "")
Call mdoc.Replaceitemvalue("SendTo", "10v. Marketing")
Call mdoc.Send(False)
Вот так вроде все работает... хотя не уверен, что кодестайл, но это уже самое последнее дело )
-
пытаюсь открыть CoreEmailClasses, открывается не понять что... Интересно, и как в первый раз открылось
%REM
Library CoreEmailClasses_ru-RU
Created Jun 22, 2012 by admin SYSTEM/
Description: Comments for Library
%END REM
Option Public
Option Declare
-
Проглючило дизайнер.
Теперь следующий вопрос:
как от этого избавится
-
Так как вы пересохранили скрипт, он подписался вашим ID-файлом.
Возможно какие-то серверные агенты используют измененную библиотеку. Тогда этот админ должен быть прописан в серверном документе на вкладке Security в разделе Programmability Restrictions.
У пользователя скорее всего выскочит такое окно. Если он выберет последний пункт, то оно больше не вылезет.
Чтобы этого окна вообще не появлялось, нужно чтобы у пользователей в ECL был добавлен ваш админ. это можно сделать серверными политиками.
-
Политику я создал... только вот не могу найти, как ее применить. Нашел только инфу, что политики обновляются каждые 12 часов.
-
На форуме обсуждалось, поищите. Например, http://www.lotusnotes.ru/forum/index.php/topic,696.msg2766.html#msg2766
-
Так, что я сейчас имею:
Создал настройку "Admin ECL" (Параметры безопасности), где в административной СУВ в -Default- добавил запись админа для Workstation security и запретил изменения этой настройки.
Создал организационную политику, как я понял, должна применяться для всех юзверей, */Verify (система сама подставила */, не вникал зачем... но хотелось бы знать для чего), в которой в качестве параметров безопасности указал Admin ECL.
Выполнил в консоли команду "Tell adminp process mail policy", при этом система выдала: completed refresh of mail policies for 0 databases... может тут и не mail надо.
Кругом голова от английских текстов... на сегодня уже каша в голове и думать уже нету сил, что делать дальше.
-
Забавная штука, этот лотус.
Судя по документации, локальный клиент при авторизации на сервере сравнивает хэши политик, если они разнятся, клиент обновляет/заменяет локальную политику с помощью тулзы Dyncfg.exe, которую разрабы не рекомендуют запускать самостоятельно.
Хотя есть еще один способ типа обновления политик: "IBM предлагает другой способ запуска - в персональной адресной книге нужно удалить документ "Preferences" (Actions => Remove Address Book Preferences)." - костыли, они везде. Собственно, на автомате при авторизации никакого обновления настроек в нужном мне месте не происходит. Хотя на клиенте 8,5 при обновлении ручками в безопасности ECL, он все-таки подхватывает явную политику. А на 7 клиенте, при таком способе политики, он все-равно выдает оповещение о безопасности.
В чем принципиальная разница между способом применения политики к юзверю. Документально я наткнулся на два способа: в доке политике и в персональном доке.
И теперь самое интересный вопрос: каков же принцип отката назад всех изменений. Предлагается такая функция: clear any assigned policies... работает очень веселым способом: если политика применена в персональном документе, тупо ставится пустое поле, в другом случае вообще ругается, что политика не применена. Забавно еще, что политика все-равно остается примененной на локальной машине, учитывая факт, что по хэшу политики все-равно не обновляются. Опять тут IBM предлагает костыль: политику на политику.
С организационной политикой все на первый взгляд проще, можно выбрать при регистрации (собственно по докам не понятно, то ли это для статических настроек, то ли для динамических). Остановило одно, юзвери уже зареганы, а документации по переопределению сертификатов для id`шки мне на глаза не попалось. Хотелось бы, конечно, узнать поподробнее об этом.
-
Если удалить локальную папку лотуса и настроить клиент еще раз, он без проблем подтягивает политику.
Если нажать ctrl+shif+f5, клиент отключиться от сервера и при подключении обновит политику, но при этом выскочит окно безопасности о согласии доверять админу.
Как же все-таки это должно происходить?
-
Глубоко вы копнули) Спасибо, что описали процессы.
Если такая заморочка с политиками, может проще оповестить пользователей, чтобы они утвердили всплывающее окно?
-
Собственно так и сделал. Хотелось бы, конечно, капнуть глубже, но моя организация не оплатит мою учебу )