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

时间:2018-03-14 05:12:54

标签: outlook lotus-notes icalendar

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

如果用户必须点击电子邮件中的内容以使其创建日历条目,则可以。

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

我尝试过:在Notes客户端中编写MIME条目并获得轻微成功的几种不同组合,但到目前为止在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支持文档Create an Add to calendar link in an email message中所述。遗憾的是,这不能使用,因为它需要一个共享的位置来存储ics文件附件,这在这种情况下是不适合的。

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

2 个答案:

答案 0 :(得分:0)

完全忘记" MIME" - 填充内容并使用Form" Notice"并填写所需的字段。 Domino将自动为外部收件人创建邀请。要了解您必须填写的字段,可以使用IBM Calendaring & Scheduling Schema

答案 1 :(得分:0)

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

您需要使用该类中的相应方法进行设置。基于上面的不完整代码,您需要创建父实体,然后使用CreateChildEntity父实体的子实体,并在子实体上使用相同的方法来创建子实体子实体。您将CreateHeader用于将父级的内容类型设置为multipart / related,使用相同的方法将子级内容类型设置为multipart / alternative,并再次设置子级孩子的内容类型为text / plain。您将使用SetContentFromText设置所需的消息文本,如果您确实需要引用可打印文本,那么您也可以在那里设置该子标题。我认为至少有两个其他实体对应于您未显示的部分 - 因为您有两个级别的多部分显然应该有其他部分。