我希望我没有重新发布这个问题,但是我的老板把这个问题推到了高优先级,我需要帮助来解决这个问题。我正在尝试使用GAS脚本从我的GSuite域上的地址中提取发布/订阅通知(目前,我正在测试我的)。基本上,我正在努力完成所有这些材料中描述的内容:
1)Great Github Project from Spencer Easton (Instructional Video)
我已经在Google云端硬盘中的工作域中创建了参考文档1中记录的GAS项目,作为草稿发布到Chrome商店,添加了PUB / SUB API和库,连接到Pub / Sub Cloud服务并具有Gmail服务帐户的权限,并创建了必要的主题/订阅。我已经运行了enrollEmail并找回了一个有效的history_Id,我可以使用API资源管理器查找并确认该文件可以写入Drive上的指定电子表格。但doPost方法永远不会像我希望的那样在电子表格上触发事件。有人可以帮我找出为什么这段代码不能在我的域上运行?我没有明确的错误消息,因为我正在尝试运行post服务。
这是我的代码:
function doPost(e) {
var ss = SpreadsheetApp.open(DriveApp.getFilesByName('Episode_Log').next()).getSheets()[0];
ss.appendRow(['Push was recieved'+ new Date()]);
try{
var message = JSON.parse(e.postData.getDataAsString()).message;
var data = Utilities.newBlob(Utilities.base64Decode(message.data)).getDataAsString();
ss.appendRow([new Date(), message.message_id, data]);
}
catch(e){ss.appendRow(['failure', e]); }
return 200;
}
function enrollEmail() {
var EMAIL = Session.getActiveUser().toString();
var watchRes = Gmail.newWatchRequest();
watchRes.labelIds = ["INBOX"];
watchRes.labelFilterAction = 'include';
watchRes.topicName = 'projects/project-id-3596301251382091354/topics/eWarning';
var response = Gmail.Users.watch(watchRes, EMAIL);
Logger.log(response);
var ss = SpreadsheetApp.open(DriveApp.getFilesByName('Episode_Log').next()).getSheets()[0];
ss.appendRow(['Manual Test']); //This works
}
function checkHistory(){
var EMAIL = Session.getActiveUser().toString();
Logger.log(Gmail.Users.History.list(EMAIL, {startHistoryId: '****'})); //works with a valid ID
}
非常感谢你们!
* PS我尚未在Google Cloud帐户中明确启用结算功能。有谁知道我是否需要为此功能开账单?
答案 0 :(得分:1)
对于像我这样需要在Google Appscript中创建监控服务并且需要快速操作的人,我想出了一个快速脚本来查看特定标签的电子邮件。使用GmailApp,您也可以按主题检查邮件。以下是代码:
var EMAILID = Session.getActiveUser().getEmail();
function getMessages() {
var expLabel = GmailApp.getUserLabelByName('Episode Expiration');
var threads = expLabel.getThreads();
for(var t = 0; t < threads.length; t++)
{
var messages = threads[t].getMessages();
for(var m = 0; m < messages.length; m++)
{
var email = {from: messages[m].getFrom().toString(),
body: messages[m].getPlainBody().toString(),
subject: messages[m].getSubject().toString()};
Logger.log(email.subject.indexOf('Expiration'));
if(/*(email.from.toString().includes('info@mydomain.com'))&&(*/email.subject.indexOf('Expiration') > 0)//)
{
var startInd = email.body.indexOf('Start')+12;
var endInd = email.body.indexOf('End')+12;
var pasInd = email.body.indexOf('Number')+8;
var qualInd = email.subject.indexOf('Q');
var qualco = email.subject.substring(qualInd, qualInd+17);
var warning = email.body.substring(email.body.indexOf('Episode Expires in'),email.body.indexOf('days')+4);
var startDate = email.body.substring(startInd, startInd+12);
var endDate = email.body.substring(endInd , endInd+11);
var priorAuthNumber = email.body.substring(pasInd , pasInd+13);
var ss = SpreadsheetApp.openById('mysheetID').getSheets()[0];
ss.appendRow([qualco, priorAuthNumber, startDate, endDate, warning]);
}
messages[m].moveToTrash();
}
}
}
此时,我实际上并不需要PubSub运行,但如果开发人员想要记录对原始问题的响应,我将保持此线程处于打开状态。谢谢,伙计们!