Отправка письма от имени другого лица

  • Автор темы D!m@n
  • Дата начала
D

D!m@n

Добрый день!

Такая проблема: надо отправлять разные уведомления пользователям из скрипта.
Делается все вполне стандартно:

Код:
Set newdoc=db.CreateDocument
newdoc.Form="Memo"
newdoc.SendTo=...
newdoc.Principal="Техподдержка"
newdoc.From="Техподдержка"
...
newdoc.Send(False)
Так вот, когда пользователю такое письмо приходит, то в поле Principal будет стоять "Техподдержка", а в поле From - имя того, кем подписан скрипт (например, "Vasya I Pupkin/..."), и поэтому такое письмо смотрится не очень красиво в юзерском почтовом ящике.
Подскажите, пожалуйста, почему так происходит и как это можно исправить?

Вариант подписать скрипт сервером не подходит, это тоже не очень красиво :)

Заранее спасибо!
 
D

D!m@n

Прошу прощения, забыл сказать: создание в мэилбоксе пробовал. Документ куда-то девается (в мэйлбоксе я его не вижу, но адресату он не доставляется).
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: D!m@n
В маилбоксе он не задерживается надолго.
Проверь поля. Все ли заполнены.
 
D

D!m@n

Знаю, что не задерживается... Но ведь и адресату не доходит... Может, Router его за что-то прихлопывает?

Вроде все поля заполняю?..
Код:
Set mailbox=s.GetDatabase(имя_сервера, "mail.box", False)
...
Set newdoc=mailbox.CreateDocument
Call doc.CopyAllItems(newdoc, True) ' doc - это исходный документ письма, я в нем кое-чего меняю и перенаправляю
Call newdoc.ReplaceItemValue("PostedDate", Now)
Call newdoc.ReplaceItemValue("ReplyTo", "Техподдержка")
Call newdoc.ReplaceItemValue("Principal", "Техподдержка")
Call newdoc.ReplaceItemValue("From", "Техподдержка")
newdoc.RemoveItem("RoutingState")
newdoc.RemoveItem("RoutingStateBy")
...
Call newdoc.ReplaceItemValue("SendTo", Cstr(rec))
Call newdoc.ReplaceItemValue("Recipients", Cstr(rec))
Call newdoc.ReplaceItemValue("CopyTo", "")
Call newdoc.ReplaceItemValue("BlindCopyTo", "")
Call newdoc.Save(1, 0)
 
S

Sandr

Добавьте обработчик ошибок... Возможно он вылетает по какой-то ошибке, а Вы этого не знаете...
 
D

D!m@n

есть и обработчик... я же только кусок кода привел... ошибок не происходит... письмо, создаваемое в мэйлбоксе, просто тихо пропадает :)((
 
S

Sandr

А что Вы пытаетесь добиться написав Cstr(rec) ? если rec у вас вариант(масив адресов), то пишите его в SendTo без всяких там Cstr... А если это вообзе число, то вопрос - куда Вы шлете письмо?

Короче, что такое rec?
 
D

D!m@n

rec - это на самом деле строка, только Variant (ну, так надо :) )... не беспокойтесь, с ним как раз все путем...
Если вместо Call newdoc.Save() написать Call newdoc.Send() - скрипт заработает и письма пойдут куда надо.
 
S

Sandr

Странно.. должен по сейву отправляться...
 
F

fedotxxl

rec - это на самом деле строка, только Variant (ну, так надо )... не беспокойтесь, с ним как раз все путем...
Если вместо Call newdoc.Save() написать Call newdoc.Send() - скрипт заработает и письма пойдут куда надо.
Ну так ведь Save - сохранение документа в базе, а Send - отправка через ваш же mail.box (если не ошибаюсь)... и не имеет значения, где документ храниться.

Мне кажется, что тут дело админов, а не программистов. Технология проста - в бд mail.box сервера кладется письмо от кого, кому, что... Мне кажется, что нужно спрашивать у админов
 
S

Sandr

Для: fedotxxl

мейлбокс и есть база... Достаточно сохранить документ в ней, что бы он потом отправился по нужному адресу...
 
D

D!m@n

Сделал в тестовой базе тупой Action с вот таким кодом:
Код:
	On Error Goto MyErr

Dim s As New NotesSession
Dim mailbox As NotesDatabase
Dim newdoc As NotesDocument

Set mailbox=s.GetDatabase("имя_сервера", "mail.box", False)
Set newdoc=mailbox.CreateDocument
Call newdoc.ReplaceItemValue("Form", "Memo")
Call newdoc.CreateRichTextItem("Body").AppendText("ПРЕВЕД")
Call newdoc.ReplaceItemValue("Subject", "PREVED")
Call newdoc.ReplaceItemValue("SendTo", "Дмитрий блабла/блабла/RU")
Call newdoc.ReplaceItemValue("CopyTo", "")
Call newdoc.ReplaceItemValue("BlindCopyTo", "")
Call newdoc.ReplaceItemValue("Recipient", "Дмитрий блабла/блабла/RU")
Call newdoc.ReplaceItemValue("ReplyTo", "Дмитрий блабла/блабла/RU")
Call newdoc.ReplaceItemValue("From", "Техподдержка")
Call newdoc.ReplaceItemValue("Principal", "Техподдержка")
Call newdoc.ReplaceItemValue("PostedDate", Now)

Call newdoc.Save(1, 0, 0)

Goto es
MyErr:
Msgbox Error$ & " in line " & Erln
Resume es
es:
НЕ РАБОТАЕТ :D((( Письмо бесследно пропадает... НУ ПОЧЕМУ??? :(


<!--QuoteBegin-fedotxxl+6:12:2007, 01:57 -->
<span class="vbquote">(fedotxxl @ 6:12:2007, 01:57 )</span><!--QuoteEBegin-->Мне кажется, что тут дело админов, а не программистов. Технология проста - в бд mail.box сервера кладется письмо от кого, кому, что... Мне кажется, что нужно спрашивать у админов
[snapback]88600" rel="nofollow" target="_blank[/snapback]​
[/quote]А что именно у них спрашивать? :D
К сожалению, лотусовые админы только я и мой начальник, и мы не знаем, что может не давать в данном случае письму отправиться...

P.S. Мужики, сорри, вместо Recipients написал в экшене Recipient, а это видать самое главное поле...
Огромное спасибо всем ответившим!
Sandr, Medevic +1
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
<!--QuoteBegin-D!m@n+6:12:2007, 11:03 -->
<span class="vbquote">(D!m@n @ 6:12:2007, 11:03 )</span><!--QuoteEBegin-->Call newdoc.ReplaceItemValue("Recipient", "Дмитрий блабла/блабла/RU")
[snapback]88650" rel="nofollow" target="_blank[/snapback]​
[/quote]
Поле называется Recipients.

Опоздал. :D
 
S

Sandr

Гы.. а я и не заметил бы... действительно :D
 
D

D!m@n

Что самое интересное - когда обратно пихаю уже работающий код из экшена в агента, который работает на сервере, то опять ничего не работает (документ создается, но бесследно исчезает)...
И - опять - если Save заменить на Send, то письма начинают ходить... Прямо мистика какая-то... ;)
 
S

Sandr

Может у агнета прав нет каких-то?
Кем подписан, какой уровень доступа?
 
F

fedotxxl

<!--QuoteBegin-Sandr+6:12:2007, 10:21 -->
<span class="vbquote">(Sandr @ 6:12:2007, 10:21 )</span><!--QuoteEBegin-->Для: fedotxxl

мейлбокс и есть база... Достаточно сохранить документ в ней, что бы он потом отправился по нужному адресу...
[snapback]88644" rel="nofollow" target="_blank[/snapback]​
[/quote]
Я про это и говорю
 
D

D!m@n

<!--QuoteBegin-Sandr+6:12:2007, 15:49 -->
<span class="vbquote">(Sandr @ 6:12:2007, 15:49 )</span><!--QuoteEBegin-->Может у агнета прав нет каких-то?
Кем подписан, какой уровень доступа?
[snapback]88721" rel="nofollow" target="_blank[/snapback]​
[/quote]Мной подписан, мой уровень доступа к мэйлбоксу - Manager + я в группе, которая может Run restricted LotusScript/Java agents, уровень безопасности агента - 2 (Allow restricted operations).
 
D

D!m@n

УРА!!! Нашел, в чем дело!
Это мега-багофича! ;)
Смотрите:
Пусть у меня на серваке 2 мэйлбокса.
Если брать мэйлбокс так:
Код:
Dim mailbox As NotesDatabase
Set mailbox=s.GetDatabase("имя_сервера", "mail.box", False)
, то благодаря известной нотусовой фиче вернется один из двух мэйлбоксов - mail1.box или mail2.box. Но создание документа в мэйлбоксе (в агенте на сервере) заработало только когда я взял один из них напрямую:
Код:
Set mailbox=s.GetDatabase("имя_сервера", "mail1.box", False)

Объяснения этому у меня нет. Просто раз и навсегда запомню.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!