利用腾讯企业邮箱开放API获取账户未读邮件数初探

    公司一直使用腾讯提供的免费企业邮箱服务,今天用管理员帐户登录后发现,原来现在腾讯的企业邮箱也开放了部分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         }

 

posted on 2014-04-16 20:50  观摩  阅读(6058)  评论(11编辑  收藏  举报