Форум продуктов IBM Lotus

Общие вопросы => Разработка приложений => Тема начата: K85 от 02 Октябрь 2012, 18:23:43

Название: отправка писем по кнопке
Отправлено: K85 от 02 Октябрь 2012, 18:23:43
Помогите, пожалуйста, разобраться.
в агенте заполняется перечень тех, кому отправляется письмо
………
Dim doc as notesdocument
Dim recipients( 1 To N ) As String
recipients( 1 ) = "recipient_1"
...
recipients( N ) = "recipient_N"
.....
doc.form = "Notice"
Call doc.send( fasle, recipients)

В самой форме письма изменена кнопка "отправить", в новой кнопке меняются некоторые поля:
Цитировать
Call doc.ReplaceItemValue("Principal"," ")   
Call doc.ReplaceItemValue("$INetPrincipal"," данные")   
…………
Call doc.ReplaceItemValue("Form","Memo")
………..

'Далее сохраняется и вызывается агент
Call doc.Save( False, True )
   Set agent = db.GetAgent("агент")
   Call agent.RunOnServer(doc.NoteID)

………
   Call doc.ReplaceItemValue("MailOptions","0")
   Call uidoc.Save
   uidoc.Close
Все бы хорошо, отправляется всем кто указан в поле Кому, отправляется с нужными изменениями, НО отправляется и при этом не заполняются все нужные поля в Отправленных , например $MessageID, $Orig , а в полученном письме эти поля заполнены
Как можно заполнить при отправке эти поля? Надо чтобы потом это письмо можно было отозвать потом
Название: отправка писем по кнопке
Отправлено: ViV от 02 Октябрь 2012, 18:36:49
Вы почтовый шаблон правите?
Название: отправка писем по кнопке
Отправлено: K85 от 02 Октябрь 2012, 18:41:41
да, в почтовой базе переделываю отправку писем
Название: отправка писем по кнопке
Отправлено: ViV от 02 Октябрь 2012, 18:48:29
Тогда лучше не заменять код на кнопке, а добавить свои скрипты в библиотеку CoreEmailClasses.
Там в функции QuerySave есть секция для MEMO_SEND.
Вроде бы она вызывается при стандартной отправке.
Название: отправка писем по кнопке
Отправлено: K85 от 02 Октябрь 2012, 18:53:31
были и такие попытки, но при указании в библиотеки ("Principal"," ")  и других полей, в дебагере видно, что они меняют значение на нужное, но прям перед отправкой опять меняются и отправляются неизмененые
Название: отправка писем по кнопке
Отправлено: ViV от 02 Октябрь 2012, 19:19:41
Ладно, а какая перед вами задача стоит?
Название: отправка писем по кнопке
Отправлено: K85 от 03 Октябрь 2012, 09:57:39
мне надо отправлять из определенной почтовой базы письма от определенного сотрудника , например Тест. В базе заполняет тело письма, выбирает список Кому отправить и отправляет письмо например Админ, в полученном письме не должно быть указано "От:" , просто отправителем должен указываться Тест. Но при этом необходимо, чтобы при необходимости письмо можно было бы отозвать
Название: отправка писем по кнопке
Отправлено: ViV от 03 Октябрь 2012, 18:32:18
Сервер все равно будет перезаписывать поле "From" пользователем от кого реально отправлено письмо или кем подписан агент. Вроде можно в настройках сервера это отключить, но будет тогда несекьюрно.

Чтобы обойти это, можно создавать документ для отправки прямо в mail.box сервера.
Название: отправка писем по кнопке
Отправлено: K85 от 03 Октябрь 2012, 19:12:21
в моем варианте тоже не записывает от кого отправляет, но появилась проблема из-за того, что не все служебные поля заполнены, нельзя Отозвать письмо
Название: отправка писем по кнопке
Отправлено: K85 от 03 Октябрь 2012, 19:17:47
а может можно по перечню из поля Кому и idписьма удалить агентом это письмо? Пока не знаю в какую сторону копать...
Название: отправка писем по кнопке
Отправлено: K85 от 09 Октябрь 2012, 15:19:25
Пробую отправлять письма через mail.box:

    Set mailbox=ses.GetDatabase(db.Server, "mail.box", False)
 Set ndoc=mailbox.CreateDocument
    Call doc.CopyAllItems(ndoc, True)
    Call ndoc.ReplaceItemValue("PostedDate", Now)
    Call ndoc.ReplaceItemValue("ReplyTo", "")
    Call ndoc.ReplaceItemValue("Principal", "имя")
    Call ndoc.ReplaceItemValue("From", "имя")
    ndoc.RemoveItem("RoutingState")
    ndoc.RemoveItem("RoutingStateBy")
 ...
   


 отправляется письмо верно, указывается отправитель в полученном письме тот, что нужен, но отозвать нельзя.
 Пробую агентом заполнять $MessageID, письмо с отчетом отзыва зависает в mail.box и в логах пишет "failed to be recalled by".
 Отзывать пробую и тем, кто отправил письмо и тем пользователем, который указан в Кому, когда письмо приходит


Скоро с ума  сойду...
Добавляю в библиотеку "CoreEmailClasses_ru-RU"
Call Me.m_noteMemo.RemoveItem("$AssistMail")
Call Me.m_noteMemo.RemoveItem("$MessageID")
Ничего не дает....
Если на измененной кнопке Отправки добавить:
vSubjectBlankSend = False
Call cMemoObject.SetActionInProgress(MEMO_SEND)
тогда отправится 2 письма: одно такое как надо, второе уже с  полными данными (и теми полями, которые не нужны)... Если убрать эти строки, то отправляется письмо 1 , оно приходит с нужными полями, но в Отправленных остается письмо без нужных полей (например, нет $MessageID)

Если перед send добавить
Call Doc.ReplaceItemValues("$Orig", Doc.UniversalID)то добавляется поле $Orig, пока не знаю какой параметр отвечает за MessageID