在使用 ASP CLASSIC 编写的旧应用程序中,我需要实现 Outlook 邀请/日历。
首先,我的例程创建 .ICS 文件(并且我将相同的内容放入“Modello_Invito”变量中),并将 .ICS 文件保存为纯文本文件
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Europe/Rome
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:20241109T103600Z
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:20241109T103600Z
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241108T000000Z
LAST-MODIFIED:20241108T000000Z
DTSTAMP:20241108T180800Z
UID:{9A7BC596-7C70-4329-9425-52486FC83D85} i
SUMMARY:Calendar: OGGETTO
ORGANIZER;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:[email protected]
ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT:mailto:[email protected]
DTSTART;TZID=Europe/Rome:09/11/2024T12:36
DTEND;TZID=Europe/Rome:09/11/2024T17:36
PRIORITY:3
TRANSP:OPAQUE
LOCATION:LUOGO MEETING
DESCRIPTION;ALTREP:Proviamo
BEGIN:VALARM
TRIGGER:PT30M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
之后,我尝试将此邀请发送给受邀请的用户
Dim objMail
Set objMail = Server.CreateObject("CDO.Message")
objMail.From = eMail_Sender
objMail.To = eMail_Dest
objMail.Cc = ""
objMail.Bcc = ""
objMail.Subject = trim(Obj_Calendar)
objMail.BodyPart.ContentMediaType = "text/calendar"
objMail.BodyPart.Charset = "UTF-8"
objMail.HTMLBody = Modello_Invito
objMail.AddAttachment sICS_file
我将 .ICS 内容放入附件和电子邮件正文中。 电子邮件以 .ICS 文件作为附件发送,但电子邮件客户端无法识别它是日历。
在其他帖子中阅读其他用户的反馈,我在代码中添加了“内容类型”建议:
objMail.Fields("urn:schemas:mailheader:content-class") = "urn:content-classes:calendarmessage"
objMail.Fields("urn:schemas:mailheader:content-type") = "text/calendar; method=REQUEST; charset=UTF-8"
objMail.Fields("urn:schemas:mailheader:content-transfer-encoding") = "8bit"
但结果并不如你所愿。 电子邮件附有 .ICS 文件,内容类型正确设置为“文本/日历”,但邮件客户端无法识别它是日历邀请。
因此不会显示“接受”、“拒绝”和“确认”按钮。
有什么建议吗?
要被识别为邀请,您的消息必须包含单个部分 (ICS)。消息内容类型必须为
text/calendar
。不要添加任何 MIME 部分,消息必须仅包含有效负载。