当前位置: 首页 > 编程语言 > C#

iCalendar不会为组织者创建活动分享

时间:2023-04-10 15:12:54 C#

C#学习教程:iCalendar不会为组织者创建事件我已经从.NET应用程序向我的Exchange邮箱发送了一封内容类型为“文本/日历”的电子邮件。它作为会议请求到达Outlook。一切看起来都很好,直到我单击传入的会议请求,Outlook将其显示为空日历视图,并显示文本:“日历中未找到会议”。我不明白为什么-我想创建一个试图找到一些现有活动的活动?如果我向组织者以外的会议参与者发送完全相同的电子邮件,它会在他们的日历中创建一个事件,并且一切似乎都正常。我发现它是由“ORGANIZER”属性引起的。如果设置为组织者的电子邮件(我的电子邮件)并且我向自己发送会议请求,则不会创建任何事件并显示消息“在日历中找不到会议”。所以问题是为什么它不为组织者创建一个事件?组织者必须创建事件以在其他参与者接受或取消会议时通知他们。这是iCalendar:BEGIN:VCALENDARPRODID:-//Company//Product3.0//ENVERSION:2.0CALSCALE:GREGORIANMETHOD:REQUESTBEGIN:VEVENTDTSTART:20130225T200000ZDTEND:20130225T203000ZDTSTAMP:20130225RZ143ZDTSTAMP:20130225RZ143mailto:john.doe@domain.comUID:20130225T143039Z@domain.comATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN="JohnSmith";X-NUM-GUESTS=0:mailto:john.smith@domain.comCLASS:PUBLICCREATED:20130225T143039ZDESCRIPTION:LAST-MODIFIED:20130225T143039ZLOCATION:SEQUENCE:0STATUS:CONFIRMEDSUMMARY:BookingtestTRANSP:OPAQUEEND:VEVENTEND:VCALENDAR假设组织者创建会议。他在预订系统中填写了一张表格。预订系统向他自己和2名与会者发送一封包含iCalendar标准的电子邮件。这种情况不起作用。无法在组织者的日历中创建事件(可取消的会议对象)。客户认为包含iCalendar格式的电子邮件只是给在组织者日历中创建的与会者的通知。如果此类电子邮件到达组织者的邮箱,则客户端应用程序不会在组织者的日历中创建事件。它假定事件是由组织者自己创建的。例如:在这种情况下,Outlook会告诉您“在日历中找不到会议”。如果您询问Microsoft支持,他们只会告诉您他们不支持开放标准:http://support.microsoft.com/kb/2269506这个问题的解决方案是使用平台服务(ExchangeWebServices或Google日历API)在您的组织中在收件人的日历中创建一个事件。忘掉iCalendar标准吧。该服务可以配置为自动向与会者发送通知。因此,如果您使用EWS,传递“SendInvitationsMode.SendToAllAndSaveCopy”就足够了:Appointmentappointment=newAppointment(service);appointment.Subject="状态会议";appointment.Body="这次会议的目的是讨论状态。";约会.Start=newDateTime(2014,3,1,9,0,0);约会.End=约会.Start.AddHours(2);appointment.Location="会议室";appointment.RequiredAttendees.Add或在GoogleCalendarAPI的情况下将“sendNotifications”参数设置为true。您不需要向每个特定的与会者发送电子邮件。这是一个老问题,但我认为这是由使用METHOD:REQUEST引起的,它表示应该更新ical,而不是它是一个新项目。相反,使用METHOD:PUBLISH我可以确认这适用于DDay.iCal和Outlook日历。这让我生气了一个星期,所以很高兴看到其他人证实了我的怀疑。其实有一个比较简单的方案,解决了问题,虽然不是很优雅。我能理解为什么不允许人们从外部来源担任组织者的角色,但令人讨厌的是你不能。发送2个邀请。一个给你自己(或任何组织者),然后与其他人不同。作为ORGANSISER你自己应该有一些不同于你的东西,例如ORGANIZER:donotreply@outlook.com其他人应该有你的电子邮件作为组织者。要使这种方法起作用,您应该设置METHOD:REQUEST。如果您将其设置为PUBLISH,您将获得重复的更新。这种方法意味着您可以将会议记录在日记中并获得回复(要获得回复,您需要为每位与会者添加以下行:ATTENDEE;CN="TheName";RSVP=TRUE:mailto:the_email@address.com。)请注意,文件的两个版本具有相同的UID。如果组织者首先收到邀请以便他们在开始收到回复之前接受邀请,那将会有所帮助,否则人们会回复实际上还不存在的内容。这不会阻止他们接受邀请,但对组织者来说可能有点混乱。为了解决这个问题,我在电子邮件1和电子邮件2之间稍作延迟。我认为您的问题是因为Exchange假定活动的组织者也是活动的发起人。这似乎很公平,否则将会议发送给组织者的人会自动将其添加到该人的日历中。综上所述,不知道如何解决这个问题。通过电子邮件发送活动邀请的行为在rfc6047中有描述,它进一步扩展了icalendarRFC(RFC5545)。关于安全的第2和第3节总结了两种欺骗威胁:欺骗“组织者”,欺骗“参与者”这是spoof@xyz.example.net没有修改或取消由a@example.com组织的会议。对于您的情况:1。您是否从与您的交换机相同的电子邮件地址发送邀请(谈论From:在邮件中而不是Organizer:mailto?如果不是,可能值得尝试通过交换机地址发送它。2如果以上没有工作,为了满足组织者需要在他们的日程中接收邀请,您可能需要以编程方式将它们添加到组织者的日程中,因为CUA(日历用户代理)或Exchange可能不允许第三方邮件程序添加事件在没有最终用户界面使用的情况下进入议程。最近几个月,我们的服务也遇到了与您相同的问题:我们的服务为组织者和与会者创建了一个会议日历,如果与会者包括组织者,则组织者(作为代理人))可以获得日历电子邮件,但它不允许接受/拒绝会议(按钮被禁用)并且在日历中看不到它(没有日历事件)。最后,我注意到这只发生在:1.邮件.From=organizer2.Ateendees.contains(organizer)//不区分大小写。因此,我只是将我的代码更改为以下代码,它适用于所有与会者(包括组织者):以上是C#学习教程:iCalendar不会创建所有内容供组织者共享。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——if(!attendeeEmail.ToLower().Contains(organizer.Address.ToLower())){message.From=组织者;}else{//比如你的实际邮件发件人,在我们的例子中,我们的邮件发件人使用另一个邮件,//sayActualSender,如果留空,那么我们的邮件发件人将填写为:message.From=ActualSenderEmail;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: