使用基于服务器的 LotusScript for Outlook 和 Notes 客户端创建日历条目



任务:创建可能导致在收件人的日历中创建日历条目的电子邮件。相同的电子邮件应该适用于 Lotus Notes 或 Outlook 客户端。该代码将位于基于 Intranet 的 Lotus Notes 窗体上的 WebQuerySave 事件调用的 LotusScript 代理中(即,代码使用登录用户的凭据在 Domino 9 服务器上运行)。

如果用户必须单击电子邮件中的某些内容才能创建日历条目,则可以。

理想情况下:我希望能够直接创建MIME内容,而不必乱用创建ics文件附件,因为服务器上的安全性受到限制,因此创建和删除临时文件存在问题。同样,如果可能的话,由于此类事情的审批过程,我想避免使用第三方插件。

我已经尝试过:编写MIME条目的几种不同组合,在Notes客户端中取得了小成功,但到目前为止在Outlook客户端中没有成功。我知道生成的 MIME 消息应该是什么样子(通过在 Lotus Notes 中创建的常规日历条目发送到 Thunderbird 客户端并使用 Ctrl-u 查看源代码),我可以模拟它,但我无法以这样一种方式发送它,因为它不会被邮件路由器打乱。

我尝试创建 MIME 流:

' .. Regular setup code here
Set stream = session.Createstream()
session.ConvertMime = False
Set docMemo = db.Createdocument()
docMemo.Form = "Memo"
Set body = docMemo.Createmimeentity
' .. create subject and To fields in the header entity here
Call stream.Writetext(".. the exact text that I want to be in the message as it appears in the recipient inbox in MIME format")
' for example:
' This is a multipart message in MIME format.
' --=_mixed 5DB3BEC8067B2AAFCA2582430012A396_=
' Content-Type: multipart/related; boundary="=_related 5DB3BEC8067B2AAFCA2582430012A396_="
' 
' --=_related 5DB3BEC8067B2AAFCA2582430012A396_=
' Content-Type: multipart/alternative; boundary="=_alternative 5DB3BEC8067B2AAFCA2582430012A396_="
' 
' --=_alternative 5DB3BEC8067B2AAFCA2582430012A396_=
' Content-Type: text/plain; charset=US-ASCII
' Content-Transfer-Encoding: quoted-printable
' 
' =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
' =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
' =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
'                Broadcast: Test outlook 3=20=20=20=20=20=20=20=20=20=20=20=
' =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
' etc...
call body.Setcontentfromtext(stream, "text/HTML;charset=UTF-8", ENC_IDENTITY_7BIT)
Call docMemo.Send(False)
session.Convertmime = True

我尝试将 MIME 格式的邮件放入富文本字段中并将其转换为 MIME:

' .. Regular setup code here
Set docMemo = db.Createdocument()
docMemo.Form = "Memo"
Set rtiBody = New NotesRichTextItem(docMemo, "Body")
' .. create subject and To fields here
Call rtiBody.AppendText(".. the exact text that I want to be in the message as it appears in the recipient inbox in MIME format")
' same MIME content as code example above
call docMemo.Converttomime(2) ' 2 = CONVERT_RT_TO_HTML_
Call docMemo.Send(False)

我想我一定误解了邮件路由器的期望和翻译的基本内容。

另一种方法是创建 Outlook 可访问的共享日历链接,如本 Office 支持文档中所述 在电子邮件中创建添加到日历链接。可悲的是,这无法使用,因为它需要一个共享位置来存储 ics 文件附件,这不适合这种情况。

我几乎陷入困境,不知道接下来该尝试什么。

如果您需要完全控制 MIME 而不是遵循 Torsten 的建议,您仍然不想自己创建 MIME 标头、分隔符和内容。NotesMIMEEntity类会为你做到这一点,当你这样做时,路由器会做正确的事情。

您需要在该类中使用适当的方法来设置它。根据上面不完整的代码,您将需要创建一个父实体,然后使用 CreateChildEntity 作为父实体的子实体,并在子实体上使用相同的方法来创建子实体的子实体。您将使用 CreateHeader 将父级的内容类型设置为多部分/相关,使用相同的方法将子项的内容类型设置为多部分/替代,并再次将子项的内容类型设置为文本/纯文本。您将使用 SetContentFromText 来设置所需的消息文本,如果您确实需要将其引号可打印,您也将在那里的孩子的子项上设置该标头。我假设至少还有两个其他实体对应于您没有显示的部分 - 因为您有两个级别的多部分,显然应该有额外的部分。

完全忘记"MIME",并使用表单"通知"创建一个文档并填写所需的字段。多米诺将自动为外部收件人创建邀请。为了知道您必须填写哪些字段,您可以使用 IBM 日历和调度模式。

最新更新