公司一直使用腾讯提供的免费企业邮箱服务,今天用管理员帐户登录后发现,原来现在腾讯的企业邮箱也开放了部分API
你可以通过开放接口实现以下功能:
数据同步
数据同步可以帮助你同步部门成员信息,你还可以创建、删除、修改帐号信息。
来信提醒
新邮件将即时在OA等办公系统提醒你。
单点登录
你可以从公司OA系统、网站一键进入企业邮箱,免去登录过程。
具体的功能可以自己登陆腾讯企业邮箱管理员界面,进入“工具箱--开放协议”中下载开放协议文档查看,有了这些API就能做不少事情了,可以尝试和公司内部的一些系统进行整合,相信会有意想不到的惊喜。
简单测试了一下未读邮件数这个能力,代码很简单,就不做说明了,由于API返回的数据是JSON格式,用到了LitJSON
1 /// <summary> 2 /// POST时用到的几个数据 3 /// </summary> 4 public struct PostData 5 { 6 /// <summary> 7 /// 目标服务器地址 8 /// </summary> 9 public string url; 10 /// <summary> 11 /// 采用的编码 12 /// </summary> 13 public string encoding; 14 /// <summary> 15 /// POST的数据 16 /// </summary> 17 public string contentData; 18 /// <summary> 19 /// contentType 20 /// </summary> 21 public string contentType; 22 /// <summary> 23 /// 添加其他的Header 24 /// </summary> 25 public string header; 26 } 27 28 /// <summary> 29 /// 申请腾讯企业邮箱时的管理员账户 30 /// </summary> 31 string client_id = "hhhhhhhhhhh.com"; 32 /// <summary> 33 /// 腾讯企业邮箱分配的接口key 34 /// </summary> 35 string client_secret = "3ed4b10okd37f2e0f56f23a3b6e53013"; 36 /// <summary> 37 /// 目标邮箱的账户,获取对应的未读邮件数 38 /// </summary> 39 string alias = "chen123@hhhhhhhhhhh.com"; 40 41 /// <summary> 42 /// 按钮事件,调用腾讯API获取Token,然后获取未读邮件数 43 /// </summary> 44 /// <param name="sender"></param> 45 /// <param name="e"></param> 46 private void bNewMailCount_Click(object sender, EventArgs e) 47 { 48 //第一步获取Token 49 PostData pdata = new PostData(); 50 pdata.url = "https://tel.exmail.qq.com/cgi-bin/token"; 51 pdata.contentData = "grant_type=client_credentials&client_id=" + client_id + "&client_secret=" + client_secret; 52 pdata.encoding = "UTF-8"; 53 pdata.contentType = "application/x-www-form-urlencoded"; 54 55 string responseString = ""; 56 //获取token_type和access_token 57 LitJson.JsonData json = this.Post(pdata, out responseString); 58 59 if (json != null) 60 { 61 //获取Token成功后,第二步,获取未读邮件数 62 pdata = new PostData(); 63 pdata.url = "http://openapi.exmail.qq.com:12211/openapi/mail/newcount"; 64 pdata.contentData = "alias=" + alias; 65 pdata.encoding = "UTF-8"; 66 pdata.contentType = "application/x-www-form-urlencoded"; 67 pdata.header = "Authorization: " + json["token_type"] + " " + json["access_token"]; 68 69 responseString = ""; 70 json = this.Post(pdata, out responseString); 71 72 if (json != null) 73 { 74 responseString = "账户:" + json["Alias"] + " 未读邮件:" + json["NewCount"]; 75 iHandler.TextBoxAppend(this.tResponse, responseString, true); 76 } 77 } 78 } 79 /// <summary> 80 /// POST,返回LitJson.JsonData对象 81 /// </summary> 82 /// <param name="pdata"></param> 83 /// <param name="responseString"></param> 84 /// <returns></returns> 85 private LitJson.JsonData Post(PostData pdata, out string responseString) 86 { 87 responseString = String.Empty; 88 try 89 { 90 Encoding encoding = Encoding.GetEncoding(pdata.encoding); 91 byte[] data = encoding.GetBytes(pdata.contentData); 92 HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(pdata.url); 93 webReq.Method = "POST"; 94 webReq.ContentLength = data.Length; 95 webReq.ContentType = pdata.contentType + "; charset=" + pdata.encoding; 96 if (!String.IsNullOrEmpty(pdata.header)) 97 { 98 webReq.Headers.Add(pdata.header); 99 } 100 Stream webStream = webReq.GetRequestStream(); 101 webStream.Write(data, 0, data.Length); 102 103 WebResponse webResp = webReq.GetResponse(); 104 Stream webRespStream = webResp.GetResponseStream(); 105 StreamReader reader = new StreamReader(webRespStream, encoding); 106 string respXml = reader.ReadToEnd(); 107 reader.Close(); reader.Dispose(); 108 webResp.Close(); 109 110 responseString = respXml; 111 return LitJson.JsonMapper.ToObject(respXml); ; 112 } 113 catch (Exception ex) 114 { 115 responseString = ex.ToString(); 116 return null; 117 } 118 }