如何在C#中获取Outlook收件人接受/拒绝约会时的评论
获取Outlook约会收件人响应时的评论
要拿到收件人接受/拒绝约会时添加的评论,你得跳出AppointmentItem.Recipients的局限——因为评论并不是存在收件人对象里的,而是存储在收件人发送的**会议响应邮件(MeetingItem)**中。下面给你具体的实现思路和代码示例:
核心思路
当收件人对约会做出带评论的响应时,Outlook会自动生成对应的MeetingItem(会议响应邮件),这个邮件和原约会是关联的。我们可以通过原约会对象获取所有关联的会议响应,然后从中提取评论内容。
结合你的现有代码修改
假设你已经通过现有代码拿到了目标AppointmentItem,可以添加这段逻辑来获取评论:
using Outlook = Microsoft.Office.Interop.Outlook; // 你的现有代码:获取目标约会项 Application Myoutlook = new Application(); Outlook.NameSpace OutlookNS = Myoutlook.GetNamespace("MAPI"); Outlook.AppointmentItem appt = Myoutlook.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar) .Items.Find("[Subject]='" + trainingName + "'") as Outlook.AppointmentItem; if (appt == null) { return null; } // 新增:遍历所有关联的会议响应邮件 foreach (Outlook.MeetingItem meetingResponse in appt.GetAssociatedMeetingItems()) { // 过滤出接受或拒绝的响应 if (meetingResponse.MeetingResponseStatus == Outlook.OlResponseStatus.olResponseAccepted || meetingResponse.MeetingResponseStatus == Outlook.OlResponseStatus.olResponseDeclined) { // 提取评论(响应邮件的正文就是收件人添加的评论) string responderComment = meetingResponse.Body; // 获取响应的发送人(即原约会的收件人) string responderName = meetingResponse.SenderName; // 这里可以根据你的需求处理评论,比如打印、存储等 Console.WriteLine($"收件人 {responderName} 的响应评论:{responderComment}"); } }
关键注意事项
- 引用程序集:确保你的项目已经引用了
Microsoft.Office.Interop.Outlook,并添加了对应的using命名空间 - 响应状态过滤:
MeetingResponseStatus有多种枚举值,除了接受、拒绝,还有暂定、未响应等,你可以根据需求调整过滤条件 - 实时监控场景:如果需要实时监控新的响应,可以订阅
Application.NewMailEx事件,当有新邮件到达时,判断是否为会议响应邮件,再关联到对应的约会项获取评论
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

