我一直在努力解决这个问题,但是我找不到错误所在。我正在编写一个程序,以检测我何时通过gmail接收到邮件并将其写在Google电子表格中。我正在使用Gmail API和Google Apps脚本。这是我的代码:
gs代码是:
function doPost(e) {
var message = JSON.parse(e.postData.getDataAsString()).message
var data = Utilities.newBlob(Utilies.base64Decode(message.data)).getDataAsString()[0];
var ss = SpreadsheetApp.openById('1b8s5PLItCsmk8l1q0T1KHYOzjW7iDv4sRXSFvAxVFbQ').getSheets()[0];
ss.appendRow([new Date(), message.message_id,data]);
return 200;
}
function capturemail(){
var WatchRes = Gmail.newWatchRequest();
WatchRes.labelIds = ["INBOX"];
//WatchRes.labelFilterAction = "include";
WatchRes.topicName = "projects/proyecgmailyou/topics/mailsuc";
var response = Gmail.Users.watch(WatchRes,"rjdelrio@uc.cl");
Logger.log(response);
}
我在网络中放置的函数doPost():https://script.google.com/a/uc.cl/macros/s/AKfycby8gOrWrMDkaAlgNdXNHl2J424Hvv0yu2CKKhJQW41Ka3Xa55g/exec
然后我尝试运行功能capturemail但出现下一个错误:
The API call to gmail.users.watch failed with the error: Invalid topicName does not match projects/sys-72285619869091378116913905/topics/*
而且很奇怪,因为我从不使用这个名称“ sys-72285619869099097811169905”,而在其他地方却看不到
我也将许可授予gmail-api-push@system.gserviceaccount.com
我认为问题是项目的ID,所以我查看了该部分,这就是我发现的内容:
我还尝试更改以下主题的名称:
projects/sys-72285619869091378116913905/topics/mailsuc
但出现另一个错误:
The API call to gmail.users.watch failed with the error: Error sending test message to Cloud PubSub projects/sys-72285619869091378116913905/topics/mailsuc : Resource not found (resource=mailsuc).
但是我确定我已经创建了该资源,因为我在这里做了
最后我用youtube的视频来指导我youtube.com/watch?v=wjHp9_NAEJo
答案 0 :(得分:2)
监视功能documentation对此项目有这样的说明:
请注意,“ my-project-identifier”部分必须与您的Google Developer项目ID(执行此监视请求的ID)完全匹配。
z2
大概是运行Apps脚本的项目的项目ID。如here所述,这是一个“默认的Cloud Project”。这显然与z1 == z2
不匹配。
要解决此问题,您可以使用following steps将Apps脚本的Cloud Project更改为“标准” Cloud Platform项目:
授权将丢失,但是此后,Apps脚本将在您的云项目中运行,因此可以使用该项目中的主题。
答案 1 :(得分:1)
有 new steps 可将您的 Apps 脚本的云项目更改为“标准”云平台项目(如果您使用的是“新编辑器”):