应公司要求在ERP平台的OA系统上显示企业邮箱的未读邮件数量,并且实现单点登录.也就是点击数字可以直接进入腾讯企业邮箱不用登录.既然用到这个API肯定大家也都有腾讯企业邮箱OpenApi协议v1.4文档了.我这是1.4的.

有了文档就可以按照上面的步骤根据需要调用API就可以了.刚开始的时候拿到这个文档都还不知道怎么做,百度下感觉效果不明显,所以想写一个稍微完整一点的实例可以供大家参考

首先我是用Java写的,根据文档需要去访问它给的地址并携带正确参数才能返回我们需要的结果.

为了发送请求所以用了HttpClient

package com.platform.util.common;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;/*** * ============================================
*  功能描述:发送POST/GET请求
============================================*/
public class HttpXmlClient {  private static Logger log = Logger.getLogger(HttpXmlClient.class);  public static String post(String url, Map<String, String> params) {  DefaultHttpClient httpclient = new DefaultHttpClient();  String body = null;  log.info("create httppost:" + url);  HttpPost post = postForm(url, params);  body = invoke(httpclient, post);  httpclient.getConnectionManager().shutdown();  return body;  }  public static String get(String url) {  DefaultHttpClient httpclient = new DefaultHttpClient();  String body = null;  log.info("create httppost:" + url);  HttpGet get = new HttpGet(url);  body = invoke(httpclient, get);  httpclient.getConnectionManager().shutdown();  return body;  }  private static String invoke(DefaultHttpClient httpclient,  HttpUriRequest httpost) {  HttpResponse response = sendRequest(httpclient, httpost);  String body = paseResponse(response);  return body;  }  private static String paseResponse(HttpResponse response) {  log.info("get response from http server..");  HttpEntity entity = response.getEntity();  log.info("response status: " + response.getStatusLine());  String charset = EntityUtils.getContentCharSet(entity);  log.info(charset);  String body = null;  try {  body = EntityUtils.toString(entity);  log.info(body);  } catch (ParseException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  return body;  }  private static HttpResponse sendRequest(DefaultHttpClient httpclient,  HttpUriRequest httpost) {  log.info("execute post...");  HttpResponse response = null;  try {  response = httpclient.execute(httpost);  } catch (ClientProtocolException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  return response;  }  private static HttpPost postForm(String url, Map<String, String> params){  HttpPost httpost = new HttpPost(url);  List<NameValuePair> nvps = new ArrayList <NameValuePair>();  Set<String> keySet = params.keySet();  for(String key : keySet) {  nvps.add(new BasicNameValuePair(key, params.get(key)));  }  try {  log.info("set utf-8 form entity to httppost");  httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));  } catch (UnsupportedEncodingException e) {  e.printStackTrace();  }  return httpost;  }  } 

上面的方法都是百度找的直接贴过来就可以用了.也不用去纠结主要是看效果对吧!其实也不难理解.

然后可以发送请求就简单了,直接调用就好了

/*** 获取腾讯企业邮箱未读邮件* @Description:   * @param    * @return void  * @author * @since 2015-9-9 上午10:33:01     * @throws*/public void getNewCount(HttpServletRequest request,String email, HttpServletResponse response){try {if(StringUtil.isNotNullOrBlank(email)&&email.contains("@hsjy.com")){//String pyName = "";/*** 将中文转成拼音再拼接邮箱*///pyName = startService.getPingYin(personName);/*** 封装获取access_token需要的参数*/Map<String, String> params = new HashMap<String, String>();  params.put("client_id", "管理帐号");  //管理帐号params.put("grant_type", "client_credentials");  //授权类型params.put("client_secret", "接口KEY");  //接口key/*** 发送给请求,获取token*/String token = HttpXmlClient.post("https://exmail.qq.com/cgi-bin/token",params);  log.info(token);/*** 将返回的字符串转成Map,获取access_token*/Map fromJson = JsonHelper.fromJson(token,Map.class);String access_token = (String) fromJson.get("access_token");/*** 封装获取未读邮件需要的参数*/Map<String, String> params2 = new HashMap<String, String>();params2.put("alias", email);    //需要获取的帐号params2.put("access_token", access_token);    //上面获取到的access_token/*** 发送请求,获取newcount未读邮件*/String mail = HttpXmlClient.post("http://openapi.exmail.qq.com:12211/openapi/mail/newcount",params2);  Map json = JsonHelper.fromJson(mail,Map.class);String newCount = (String) json.get("NewCount");log.info(newCount+"条未读邮件");//如果获取的未读邮件是0或者是null都设置为""页面判断不在显示if(newCount!=null&&!"".equals(newCount)&&!"0".equals(newCount)){request.setAttribute("newcount", newCount);}else{request.setAttribute("newcount", "");}/*** 发送请求,获取AuthKey*/String authKey = HttpXmlClient.post("http://openapi.exmail.qq.com:12211/openapi/mail/authkey",params2); log.info(authKey);//将json字符串转成MapMap authKeyJson = JsonHelper.fromJson(authKey,Map.class);//获取到authKeyValueString authKeyValue = (String) authKeyJson.get("auth_key");//String authKey2 = HttpXmlClient.post("https://exmail.qq.com/cgi-bin/login?fun=bizopenssologin&method=bizauth&agent=hsjyadmin&user="+pyName+"@hsjy.com"+"&ticket="+authKeyValue,params2); /*** 设置页面腾讯企业邮箱单点登录页面需要的参数*/request.setAttribute("pyName", email);request.setAttribute("authKeyValue", authKeyValue);          /*try {PrintWriter writer = response.getWriter();writer.write(authKey2);} catch (IOException e) {e.printStackTrace();}*/}} catch (Exception e) {e.printStackTrace();}}

<c:choose><c:when test="${not empty newcount}"><dl><dt><a href="<%=common_root%>/admin/oa/commanage/mail/manage.do?formAction=receiveBoxList"><img src="data:images/2.0/read4.jpg" width="36" height="35" /></a></dt><dd>未读信件:内部&nbsp;<a href="<%=common_root%>/admin/oa/commanage/mail/manage.do?formAction=receiveBoxList"><span id="noReadMailCount"></span></a>个&nbsp;外部 <a href="https://exmail.qq.com/cgi-bin/login?fun=bizopenssologin&method=bizauth&agent=hsjyadmin&user=${pyName}&ticket=${authKeyValue}">${newcount}</a>个</dd></dl></c:when><c:otherwise><dl><dt><a href="<%=common_root%>/admin/oa/commanage/mail/manage.do?formAction=receiveBoxList"><img src="data:images/2.0/read4.jpg" width="36" height="35" /></a></dt><dd>未读信件:&nbsp;<a href="<%=common_root%>/admin/oa/commanage/mail/manage.do?formAction=receiveBoxList"><span id="noReadMailCount"></span></a>个</dd></dl></c:otherwise></c:choose>

代码已经贴出来了,相当简单吧.

要注意的就是在传参数的时候只需要把获取的access_token传过去就好了,不要去拼接前面授权类型.

此博文仅供参考.欢迎留言交流学习.

=================================================华=丽=分=割=线(更新时间:2016/12/6)==============================================

下面有个C#的园友咨询获取不到auth_key的问题,今天做下更新.

上面的代码没问题,而是现在腾讯企业邮箱在获取token的时候需要设置可使用此开放接口的IP,如果没有在指定的IP内会报出100001错误码.设置好了就可以了.这里设置的是外网IP不是局域网IP.也就是在百度里面搜索IP显示的地址

设置此开放接口的IP需要用管理员登录企业邮箱 工具箱->开放接口里面设置的.最多只能有5个

转载于:https://www.cnblogs.com/zxgwork/articles/4810937.html

腾讯企业邮箱API实现单点登录和获取企业未读邮件相关推荐

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

    1 /// 2 ///POST时用到的几个数据3 /// 4 public structPostData5 {6 /// 7 ///目标服务器地址8 /// 9 public stringurl;10 ...

  2. 腾讯企业邮箱api java_腾讯企业邮全新API,五大新接口上线_腾讯企业邮箱服务中心...

    为了更好地支持企业拓展.定制邮箱的功能,腾讯企业邮推出全新的开放接口规范,对旧API接口进行全面升级.新API接口在接口规范.接口能力.接口安全等各方面都得到显著提升. 管理端工具箱的"开放 ...

  3. 对接腾讯企业邮箱(授权免登,获取未读邮件数量)

    温馨提示:企业邮箱必须是专业版的才行,基础版的升级成专业版再对接吧 第一步:获取access_token 接口地址: https://api.exmail.qq.com/cgi-bin/gettoke ...

  4. 用Jenkins连接腾讯企业邮箱,在构建任务失败时给自己发邮件提醒

    参考:Jenkins自动发送邮件配置及定时构建 Jenkins构建失败自动发邮件的配置,主要有以下三步: 1.安装插件 2.系统配置里配置发邮件的邮箱,并测试 3.在任务里配置构建后发邮箱的步骤 本文 ...

  5. 企业邮箱托管外包后安全吗?企业邮箱安全须知

    目前各主流企业邮箱网易.TOM.腾讯等均采用SSL加密传输的方式,为企业提供高级别安全服务平台.但这只是在第一道入口加以防范,想更有效的保障企业安全,以下几点你需要知道~ 邮箱密码安全 企业邮箱管理员 ...

  6. 外包企业邮箱服务怎么选?哪家外包企业邮箱服务好?

    公司开通企业邮箱时会有两种情况,一个是选择外包企业邮箱服务,直接使用市场上能见到企业邮箱,像TOM.网易.腾讯这些.或者公司技术人员自己搭建企业邮箱,自建的企业邮箱适合超级大的企业,例如有几千.上万人 ...

  7. 企业邮箱哪家好用,常见的企业邮箱品牌测评

    企业邮箱是不同规模及行业的企业都会采用的办公方式,尤其是对初创企业,面临邮箱选择的问题,企业究竟需要一个具备何等条件的产品才能满足真正的需求呢? 通过使用企业微信邮箱-TOM随心邮,发现企业邮箱现已做 ...

  8. 企业邮箱托管选哪家好,163企业邮箱如何购买?

    如今,很多企业在日常管理中都会选择使用邮箱,由于自建邮箱所耗费的精力及成本较多,各大企业通常选择外包企业邮箱,将企业邮箱托管至专业的服务商.如TOM企业邮箱.163企业邮箱等,俗话说,专业的人做专业的 ...

  9. python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容

    python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容 1.前言 前面在 python3爬虫系列20之反爬需要登录的网站三种处理方式中介绍的第三种方法,使用自动化测试工具s ...

最新文章

  1. 中国AI专利申请量占全球74%,腾讯、百度、OPPO前五
  2. 讲解ontouchstart、ontouchend、onclick区别和坑点
  3. 偶然在网上看到的题目,jQuery功底如何一测便知晓!!!!!!
  4. NSDictionary / NSMutableDictionary 及 NSArray / NSmutableArray (实例)
  5. h5手机端浏览器机制_H5 浏览器的9种缓存机制
  6. Java与算法之(2) - 快速排序
  7. linux离线安装yum源
  8. IP协议详解之IPv6头部结构简介
  9. Vivado Tcl命令行模式小记
  10. 微服务下权限校验方案
  11. AutoSAR配置视频讲解:简介
  12. php里在调用wp,WordPress 教程:使用 WP_Http 在 WordPress 中发起 HTTP Request
  13. 【至简设计案例系列】基于FPGA的密码锁设计(altera版)
  14. 微信小程序打卡活动实现PHP,微信小程序实现打卡日历功能
  15. 使用\begin{aligned} 出现 Environment aligned undefined.解决办法
  16. Win10任务栏卡死的几个处理方法 附小工具
  17. 软件测试【月入1万如讨饭】需要多少才能算高薪呢?
  18. 用Java输出兔子图形,如何画出可爱的兔子?那你看看这个!
  19. 青松资讯:想窃取用户密码?一个“U盘”就能搞定
  20. C/C++跨平台的的预编译宏

热门文章

  1. XML解析---JAVAEE学习之路
  2. SpringBoot Web原生组件注入(Servlet、Filter、Listener)
  3. 动态规划和贪心算法的区别
  4. Leetcode-翻转图像(832)
  5. PC 远程控制 android手机的方法之一VNC
  6. 【译】Consortium Chain Development
  7. Android SystemServer分析
  8. Android通过Geth RPC接口实现接入以太坊私有链
  9. SSD: how to optimize your Solid State Drive for Linux Mint 17.3, Ubuntu 16.04 and Debian
  10. python字典中append_零基础入手!Python中字典与集合的使用指南