【发布时间】:2013-12-13 04:03:48
【问题描述】:
我一直在尝试从浏览器界面自动填充 Lotus Notes 邮件。
参考 Richard Schwartz 的回答后,我使用 Lotus.NotesSession 类想出了这段代码。
function SendScriptMail() {
var mToMail = document.getElementById('txtMailId').value
var mSub = document.getElementById('txtSubject').value
var mMsg = document.getElementById('txtContent').value
var Password = "yyy"
alert("1");
var MailFileServer = "xxx.com"
var MailFile = "C:\Program Files\IBM\Lotus\Notes\mail\user.nsf"
alert("2")
var Session;
var Maildb;
var UI;
var NewMail;
var From = "user@xxx.com"
try {
alert("3")
// Create the Activex object for NotesSession
Session = new ActiveXObject("Lotus.NotesSession");
alert("4")
if (Session == null) {
throw ("NoSession");
} else {
Session.Initialize(Password);
// Get mail database
Maildb = Session.GetDatabase(MailFileServer, MailFile);
alert("5")
if (Maildb == null) {
throw ("NoMaildb");
} else {
NewMail = MailDB.CreateDocument();
if (MailDoc == null) {
throw ('NoMailDoc');
} else {
// Populate the fields
NewMail.AppendItemValue("Form", "Memo")
NewMail.AppendItemValue("SendTo", mToMail)
NewMail.AppendItemValue("From", From)
NewMail.AppendItemValue("Subject", mSub)
NewMail.AppendItemValue("Body", mMsg)
NewMail.Save(True, False)
NewMail.Send(False)
}
}
}
} catch (err) {
// feel free to improve error handling...
alert('Error while sending mail');
}
}
但是现在,警报 1,2,3 正在触发,然后计数器移动到 catch 块。 Lotus Notes 会话未开始。
在我之前查看的一个 powershell 脚本中,有一个代码 regsvr32 "$NotesInstallDir\nlsxbe.dll" /s 在 Session = new ActiveXObject("Lotus.NotesSession"); 之前使用。 javascript中是否也有类似的东西,如果有,我该如何调用该dll。
我想我已经意识到我哪里出错了。据我说,直到alert("5") 事情都很好。但是由于Lotus.NotesSession 没有CreateDocument() 方法,它会抛出错误。我不确定如何创建文档并填充值。
【问题讨论】:
-
Lotus Notes 安装程序的某些版本无法正确注册 NLSXBE.DLL。例如,请参阅此 IBM 技术说明:www-01.ibm.com/support/docview.wss?uid=swg21112239 这将影响在计算机上但在 Notes 客户端环境之外运行的所有 Notes 应用程序。我不知道有任何黑客可以让您从 JavaScript 运行 regsvr32.exe。如果可能的话,这将是一个巨大的安全漏洞。这只是在您的 JavaScript 可以运行之前必须在安装中更正的问题。
-
我发现activex控制器只能在Internet Explorer中工作,所以我不需要导入dll文件。但是,安装数据库后,我不确定如何继续。请指导我完成接下来的步骤。
-
您将以与目前几乎相同的方式继续进行(即初始化会话:调用 getDatabase 和 createDocument,以及 appendItemValue,但 Body 除外。为此,您将使用类似 rtBody = NewMail.CreateRichTextItem("Body"),然后您将使用 NotesRichTextItem 类的方法(例如 AppendText、AppendTable、AppendStyle... 更多信息请参阅文档)来创建您的内容。