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

  • Автор темы oxystile
  • Дата начала
O

oxystile

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

отправляю через 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. Там этот пользователь есть. Где еще стоит искать корень сего зла?

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#2
-откуда объект mail
-зачем цикл
 
O

oxystile

#4
объект 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 этот пользователь есть. По идее к локальной он же не должен обращаться
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#5
письма всему массиву адресатов, но так как первому отправка была невозможна то и остальным они не приходили.
впервые слышу такое...
Send - это метод документа, а не базы
собсно на него и жалуется (КМК) ваша программа, т.е. док похачили
вот код - работает и отправляет админу (несмотря на левые адреса - ничего не прерывается):
Код:
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
 

phantom76

Lotus team
25.02.2005
360
4
#6
скрип где отрабатывает на сервере или на клиенте?

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

oxystile

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#8
Это у вас просто обработчика ошибок нет)) on Error... a так этот код тож валится с ошибкой но текст там "невозможно найти адресата в адрессной книжке"
у меня не валится

Добавлено:
скрип где отрабатывает на сервере или на клиенте?
из контекста - клиент, иначе зачем нужна OpenMail
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#9
я ваще не понимаю - что нужно написать шобы так глючало...
спрашиваю - где объект - отвечают не по теме
где код?...
да и хотелосьбы знать - как Send должен узнать о ресипиентах? он тупо отдаёт роутеру, на доставку, а уж роутер решает - по какому маршруту
это чё, типа, я отправлю на внешний адрес, а домина должна знать ресипиента?! - БРЕД
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#10
да и хотелосьбы знать - как Send должен узнать о ресипиентах? он тупо отдаёт роутеру, на доставку, а уж роутер решает - по какому маршруту
это чё, типа, я отправлю на внешний адрес, а домина должна знать ресипиента?! - БРЕД
Кстати не бред. Есть такие процессы, при которых отправка д.б. все адресатам, и если хоть одному не отправил, то не отправлять. Здесь как раз бы и была полезна функция/метод тестирования адресов (внутренних для сервера - возможность отправки: есть ли персона или нет, и проч., внешних - просто проверка корректности адреса). Ну или функцию возврата письма сделали бы в API LS/Java, по аналогии с Клиентом. Этого очень не хватает, т.к. получается обломинго - половине отправил и вдруг затык...

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#11
т.к. получается обломинго - половине отправил и вдруг затык...
вот этого я и не наблюдаю (затык) - просто не отправится тем "кого нет" (без ошибки, в коде)
для полной картины - 7-ка и код как на клиенте так и на сервере
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#12
lmike
Тогда не знаю. У меня всегда высыпается. И вообще я впервые слышу, чтобы ошибка при отправке не генерилась.. Может что-то в notes.ini...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#13
код выше, у меня, не генерит ошибки, и письмо приходит админу
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#14
когда-то агент писал, для установки прав, по адресу, там проверяется по АК присутствие юзера (по мыльному адресу
, до первого совпадения) и выставляеются права:<!--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]
 
O

oxystile

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#16
энивэй, у мя не генерится ошибка, ни на сервере ни на клиенте, особых настроек, в ини, нет
роутер ругнётся, но не более того (к агенту он не имеет отношения)
в локейшенах всегда пропписан Domino mail Domain