Не отправляется письмо одному из сотрудников

Тема в разделе "Lotus - Программирование", создана пользователем oxystile, 25 авг 2011.

  1. oxystile

    oxystile Гость

    Доброго времени суток!
    Имеется трабла с отправкой почты.

    отправляю через maildb.OpenMail

    дальше цикл:
    ForAll t In SendToRecipient
    Call mail.Send( False, t )
    End forall

    SendToRecipient - массив
    на одном из сотрудников на строке mail.Send ошибка error 4000 document has been deleted.
    Для сервера который указан в локейшене на вкладке "Servers" проверила names.nsf. Там этот пользователь есть. Где еще стоит искать корень сего зла?

    Спасибо заранее!
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    -откуда объект mail
    -зачем цикл
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Может поиск получателей ведётся в локальной адресной книге?
     
  4. oxystile

    oxystile Гость

    объект mail это current user's mail database:
    Dim maildb As New NotesDatabase("","")
    Call maildb.OpenMail
    If Not maildb.IsOpen Then
    MessageBox "Cannot open mail db", 64 , "Exception"
    Exit Sub
    End If

    Цикл пока для теста. Потому как раньше отправлялись письма всему массиву адресатов, но так как первому отправка была невозможна то и остальным они не приходили.

    TO nvy: Вопрос а почему в локальной АК? В текущем локейшене у меня указан сервер, на этом сервере в names.nsf этот пользователь есть. По идее к локальной он же не должен обращаться
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    впервые слышу такое...
    Send - это метод документа, а не базы
    собсно на него и жалуется (КМК) ваша программа, т.е. док похачили
    вот код - работает и отправляет админу (несмотря на левые адреса - ничего не прерывается):
    Код (LotusScript):
    Sub Initialize
    Dim db As New NotesDatabase( "", "" )
    Call db.OpenMail
    Dim mail As NotesDocument
    Set mail=db.CreateDocument()
    Dim recipients
    recipients=Split("","")
    recipients(0)="fignays0"
    recipients=Arrayappend(recipients,"fignyas1")
    recipients=Arrayappend(recipients,"admin/CRUINTERNET")
    recipients=Arrayappend(recipients,"fignyas2")
    Call mail.ReplaceItemValue({Subject}, "test message")
    Call mail.Send(False,recipients)

    End Sub
     
  6. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    скрип где отрабатывает на сервере или на клиенте?

    и mail должен быть отправляемый док, а не почтовый ящик.
     
  7. oxystile

    oxystile Гость

    Это у вас просто обработчика ошибок нет)) on Error... a так этот код тож валится с ошибкой но текст там "невозможно найти адресата в адрессной книжке"
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    у меня не валится

    Добавлено:
    из контекста - клиент, иначе зачем нужна OpenMail
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    я ваще не понимаю - что нужно написать шобы так глючало...
    спрашиваю - где объект - отвечают не по теме
    где код?...
    да и хотелосьбы знать - как Send должен узнать о ресипиентах? он тупо отдаёт роутеру, на доставку, а уж роутер решает - по какому маршруту
    это чё, типа, я отправлю на внешний адрес, а домина должна знать ресипиента?! - БРЕД
     
  10. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Кстати не бред. Есть такие процессы, при которых отправка д.б. все адресатам, и если хоть одному не отправил, то не отправлять. Здесь как раз бы и была полезна функция/метод тестирования адресов (внутренних для сервера - возможность отправки: есть ли персона или нет, и проч., внешних - просто проверка корректности адреса). Ну или функцию возврата письма сделали бы в API LS/Java, по аналогии с Клиентом. Этого очень не хватает, т.к. получается обломинго - половине отправил и вдруг затык...

    Добавлено: цикл, кстати нужен для того, чтобы локализовать проблему (юзера, на котором споткнулось), это правильно, т.к. ошибок при отправке там целая куча разных, и каждую надо/можно обрабатывать по своему..
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    вот этого я и не наблюдаю (затык) - просто не отправится тем "кого нет" (без ошибки, в коде)
    для полной картины - 7-ка и код как на клиенте так и на сервере
     
  12. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    lmike
    Тогда не знаю. У меня всегда высыпается. И вообще я впервые слышу, чтобы ошибка при отправке не генерилась.. Может что-то в notes.ini...
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    код выше, у меня, не генерит ошибки, и письмо приходит админу
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    когда-то агент писал, для установки прав, по адресу, там проверяется по АК присутствие юзера (по мыльному адресу
    , до первого совпадения) и выставляеются права:<!--shcode--><pre><code class='java'>import lotus.domino.*;
    import java.util.*;

    public class JavaAgent extends AgentBase {

    public void NotesMain() {

    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();

    // (Your code goes here)
    Document doc=agentContext.getDocumentContext();
    String stFrom=doc.getItemValueString("From").replace('\"',' ').trim();
    String stInetFrom=doc.getItemValueString("INetFrom");
    if ( !(stInetFrom.equals("") || stInetFrom.equals(".")) )stFrom=stInetFrom;
    if (stFrom.lastIndexOf("<") >= 0) stFrom=stFrom.substring(stFrom.lastIndexOf("<")+1,stFrom.lastIndexOf(">"));
    System.out.println("From:" + stFrom);
    String userName="";
    Vector books=session.getAddressBooks();
    ListIterator e = books.listIterator();
    while (e.hasNext()) {
    Database db;
    db = (Database)e.next();
    if (db.isPublicAddressBook()) {
    if (!db.isOpen()) {
    if(!db.open()){
    System.out.println("can't open Address Book:" + db.getTitle() + "; " + db.getFileName());
    // return(0);
    }else
    {
    userName=SearchName(db, stFrom);
    if(userName.equals("") && stFrom.lastIndexOf("@")>0)
    userName=SearchName(db, stFrom.substring(0,stFrom.lastIndexOf("@")).replace('.',' '));
    System.out.println("db:"+ db.getTitle() +"; user:" + userName);
    if ( !userName.equals("")){
    Item item=doc.replaceItemValue("current_author",userName); //, AUTHORS)
    item.setAuthors(true);
    Item item1=doc.replaceItemValue("avail_for",userName); //, READERS)
    item1.setReaders(true);
    Item item2=doc.replaceItemValue("editors","[dbEditor]"); //, AUTHORS)
    item2.setAuthors(true);
    Item item3=doc.replaceItemValue("managers","[dbEditor]"); //, READERS)
    item3.setReaders(true);
    doc.save();
    break;
    }
    }
    }
    }
    }
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    public String SearchName(Database db, String userID)
    {
    String userName="";
    try{
    View view=db.getView("($Users)");
    ViewEntry entry=view.getEntryByKey(userID);
    if (entry!=null) {
    Vector column= (Vector)entry.getColumnValues().elementAt(2);
    userName="" + column.elementAt(0);
    }
    } catch(Exception e) {
    e.printStackTrace();
    }finally {
    return(userName);
    }

    }

    }[/CODE]
     
  15. oxystile

    oxystile Гость

    Причину своей ошибки я поняла. НО пока решила только с помощью заплатки.
    Список лиц которым отправлялось письмо был в формате username.abbreviated.
    Одному человеку письмо не уходило. Ушло только после того как к его имени я добавила домен (типа @Maildomain)
    Это работает как для тестов на сервере, так и на локале.
    Проблема в этом @Maildomain, который не подхватывается.
    С настройками моего локейшена все верно. Бывалый программист сказал что это старый баг который он лечил с помощью заплатки (скрипт который брал доменное имя из общей базы адресов)
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    энивэй, у мя не генерится ошибка, ни на сервере ни на клиенте, особых настроек, в ини, нет
    роутер ругнётся, но не более того (к агенту он не имеет отношения)
    в локейшенах всегда пропписан Domino mail Domain
     
Загрузка...

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