会议系统同步OUTLOOK
我们公司有一个强大的会议系统,产品小姐姐提了个需求,想要我们对全公司outlook进行改造,要求会议系统里的会议自动同步到outlook,接到需求的时候我深思熟虑了0.1秒,满口答应下来:对不起,实现不了!
产品小姐姐也挺温柔的:我不管,明天上线!
- 实现思路:
- 新建一个会议账号,使用ews链接exchange邮箱服务器。
- 会议系统调用我的接口,告诉我会议时间,主题,内容,地点,哪些参会人等信息
- 我使用会议账号发送会议邀请,并且记录会议唯一ID,通过此ID后期进行会议更改,取消等操作
今天通个宵,应该能赶上明天固传
- 环境:
- .NET Framework 4.5.2 框架
- Web API 程序
- 引用
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web.Http;
using System.Web.Script.Serialization;
using System.Text;
using Microsoft.Exchange.WebServices.Data;
using MySql.Data.MySqlClient;
using System.Data;
using Threading_Tasks = System.Threading.Tasks;
- 创建service服务器连接串
public ExchangeService servicevalue()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2, TimeZoneInfo.Local);
service.Credentials = new WebCredentials("mettingaccount", "mettingaccount_password", "contoso.com");
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.Url = new Uri("https://mail.contoso.com/ews/exchange.asmx");
}
- 创建会议信息参数实体
public class meetingmessagevalue
{
/// <summary>
/// 会议主题
/// </summary>
public string subject { get; set; }
/// <summary>
/// 会议内容
/// </summary>
public string body { get; set; }
/// <summary>
/// 会议开始时间
/// </summary>
public DateTime starttime { get; set; }
/// <summary>
/// 会议结束时间
/// </summary>
public DateTime endtime { get; set; }
/// <summary>
/// 会议地点
/// </summary>
public string location { get; set; }
/// <summary>
/// 参会人列表
/// </summary>
public List<string> Recipient { get; set; }
/// <summary>
/// 会议开始前提示时间
/// </summary>
public int ReminderMinutesBeforeStart { get; set; }
}
- 发送会议接口主方法
[HttpPost]
public HttpResponseMessage Createmeeting(meetingmessagevalue mailvalue)
{
try
{
string subject = mailvalue.subject;
string body = mailvalue.body;
string location = mailvalue.location;
int ReminderMinutesBeforeStart = mailvalue.ReminderMinutesBeforeStart;
List<string> Recipient = mailvalue.Recipient;
DateTime starttime = mailvalue.starttime;
DateTime endtime = mailvalue.endtime;
ExchangeService service = servicevalue()
Appointment meeting = new Appointment(service);
meeting.Subject = subject;
meeting.Body = body;
meeting.EndTimeZone = TimeZoneInfo.Local;
meeting.StartTimeZone = TimeZoneInfo.Local;
meeting.Start = starttime;
meeting.End = endtime;
meeting.Location = location;
meeting.IsResponseRequested = false;
meeting.AllowNewTimeProposal = false;
foreach (string text in Recipient)
{
meeting.RequiredAttendees.Add(text);
}
meeting.ReminderMinutesBeforeStart = ReminderMinutesBeforeStart;
meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy);
Item item = Item.Bind(service, meeting.Id, new PropertySet(ItemSchema.Subject));
bool isSuccess = true;
var result = new { isSuccess = isSuccess, message = item.Id.UniqueId };
HttpResponseMessage resultjson = toJson(result);
return resultjson;
}
catch (Exception ex)
{
var message = new { message = ex.Message };
var result = new { isSuccess = false, message = message };
HttpResponseMessage resultjson = toJson(result);
return resultjson;
}
}
- 使用postman测试,返回message为会议ID
- Outlook收到会议邀请