利用腾讯企业邮箱开放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 = "[email protected]";

 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         }

 

你可能感兴趣的:(api)