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

Тема в разделе "Lotus - Программирование", создана пользователем D!m@n, 5 дек 2007.

  1. D!m@n

    D!m@n Гость

    Добрый день!

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

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

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

    Заранее спасибо!
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
  3. D!m@n

    D!m@n Гость

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: D!m@n
    В маилбоксе он не задерживается надолго.
    Проверь поля. Все ли заполнены.
     
  5. D!m@n

    D!m@n Гость

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

    Вроде все поля заполняю?..
    Код (Text):
    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)
     
  6. Sandr

    Sandr Гость

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

    D!m@n Гость

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

    Sandr Гость

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

    Короче, что такое rec?
     
  9. D!m@n

    D!m@n Гость

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

    Sandr Гость

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

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Ну так ведь Save - сохранение документа в базе, а Send - отправка через ваш же mail.box (если не ошибаюсь)... и не имеет значения, где документ храниться.

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

    Sandr Гость

    Для: fedotxxl

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

    D!m@n Гость

    Сделал в тестовой базе тупой Action с вот таким кодом:
    Код (Text):
        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
     
  14. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--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
     
  15. Sandr

    Sandr Гость

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

    D!m@n Гость

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

    Sandr Гость

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

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    <!--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]
    Я про это и говорю
     
  19. D!m@n

    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).
     
  20. D!m@n

    D!m@n Гость

    УРА!!! Нашел, в чем дело!
    Это мега-багофича! ;)
    Смотрите:
    Пусть у меня на серваке 2 мэйлбокса.
    Если брать мэйлбокс так:
    Код (Text):
    Dim mailbox As NotesDatabase
    Set mailbox=s.GetDatabase("имя_сервера", "mail.box", False)
    , то благодаря известной нотусовой фиче вернется один из двух мэйлбоксов - mail1.box или mail2.box. Но создание документа в мэйлбоксе (в агенте на сервере) заработало только когда я взял один из них напрямую:
    Код (Text):
    Set mailbox=s.GetDatabase("имя_сервера", "mail1.box", False)
    Объяснения этому у меня нет. Просто раз и навсегда запомню.
     
Загрузка...
Похожие Темы - Отправка письма от
  1. k85
    Ответов:
    10
    Просмотров:
    879
  2. JohnLemon
    Ответов:
    18
    Просмотров:
    1.553
  3. AlexanderShad
    Ответов:
    9
    Просмотров:
    3.139
  4. susinmn
    Ответов:
    4
    Просмотров:
    3.328
  5. azat20
    Ответов:
    2
    Просмотров:
    2.038

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