从委派邮箱中获取未读邮件计数

时间:2013-11-25 14:51:06

标签: google-apps-script google-admin-sdk

我正在寻找一种方法,可以从任何Google API中查找已委派邮箱的未读邮件数。

我不确定这是否可行,但它可以帮助我为一家公司开发一个帮助工具,用于1000多个用户。许多代表团正在进行中,我渴望找到一种方法来实现这一目标。

但是我可能需要一些帮助,可能是那些知道Google管理SDK可能性的人。

我想使用Google Apps脚本收集未读邮件数。

2 个答案:

答案 0 :(得分:1)

电子邮件设置API允许您see which delegations are in place

用户无法访问通过IMAP委派他们访问权限的其他用户的邮箱,因此您无法以用户身份进行身份验证并检查委派的邮箱。

您应该使用OAuth 2.0服务帐户authenticate to the mailboxes via IMAP

经过身份验证后,您可以选择Gmail“所有邮件”文件夹(如果您只想计入收件箱,则可以选择收件箱)。然后执行Gmail search of "is:unread"以确定用户有多少条未读消息。

仅供参考,我的open-source应用,GYB可以做到这一点。有一个getting started guide for GYB。您还需要setup the service account。获取所有邮件的未读邮件计数的命令将类似于:

gyb --email delegated-mailbox@yourcompany.com --service-account your-service@account.com --action count --search "is:unread"

答案 1 :(得分:0)

我在Google Plus上获得了GAS社区的答案,因此请在那里宣传海报。

https://plus.google.com/106333172328928589411/posts/7g3Vu7iFZfb

塞尔吉: 查看此要点,了解如何在GAS https://gist.github.com/rcknr/c5be4eb80d821158c8ef中执行2版OAuth身份验证。

使用2 Legged Oauth,您可以访问其他用户的ATOM Feed:

它的一段工作代码:

function gmail2lo(user) {
 var OAUTH_CONSUMER_SECRET = 'secret';
  var domain = 'domain'; //use the domain as key in apps panel
  var username = 'user';
  var xuser = username+'@'+domain;
  var method = "GET";
  var baseUrl = "https://mail.google.com/mail/feed/atom";

  var timestamp = Math.round(new Date().getTime() / 1000);  

  var paramsJson;
  var paramsOauth = {
    oauth_consumer_key : domain,
    oauth_nonce : timestamp,
    oauth_signature_method : "HMAC-SHA1",
    oauth_timestamp : timestamp,
    oauth_version : "1.0",
    'xoauth_requestor_id' : xuser
  };

  var paramsStringArray =  [];
  for (var k in paramsJson)
    paramsStringArray.push(k + '=' + encodeURIComponent(paramsJson[k]));

  var oauthStringArray = [];  
  for (var k in paramsOauth)
    oauthStringArray.push(k + '=' + encodeURIComponent(paramsOauth[k]));

  var paramsString = paramsStringArray.concat(oauthStringArray).sort().join('&');
  var signatureBaseString = method +"&"+ encodeURIComponent(baseUrl) +"&"+ encodeURIComponent(paramsString);
  var signatureBytes = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_1, signatureBaseString, OAUTH_CONSUMER_SECRET+'&');
  var signature = encodeURIComponent(Utilities.base64Encode(signatureBytes));

  var xoauthString = 'OAuth ' + oauthStringArray.sort().slice(0,oauthStringArray.length-1).join(", ") + ', oauth_signature=' + signature;

  var ooptions = {
    headers : {authorization: xoauthString}
  }

  url  = baseUrl;
  url += "?" + paramsStringArray.join("&") + '&xoauth_requestor_id=' + encodeURIComponent(xuser);

  var response = UrlFetchApp.fetch(url, ooptions).getContentText();

}