如何解决使用 Gmail API 搜索包含特定 URL 的电子邮件
我正在 Gmail 中查找包含特定网址的所有电子邮件,例如:
http://www.example.com/page1/?utm_source=foo1234&utm_medium=bar
这无法通过 Gmail 网络界面访问(请参阅 search syntax here):我尝试搜索整个 URL、带引号的相同文本或仅部分 URL(如 foo1234
、{ {1}},所有这些查询都没有返回结果。
您可以通过向自己发送包含此 URL 的电子邮件来重现此内容(显示的文本不是 URL 本身,您可以使用 CTRL+K、“编辑链接”对其进行自定义),在此处结果是:
请注意,如果显示的文本是 URL 本身,则存在搜索匹配,但这里我说的是显示文本与 URL 不同的情况。请参阅注释 (* ) 下面。
问题:是否可以通过 Gmail API(例如 Python)/带有 Javascript 的 Google Apps 脚本进行更深入的搜索,从而可以找到包含特定 URL 的邮件?
如果是这样,您将如何搜索包含此类 URL 的所有电子邮件?
我尝试使用 Gmail Python API:
utm_source=foo1234
没有成功。有没有办法进行更深入的搜索?
注意 (*):这是一个这样的例子:
解决方法
这对我有用:
function searchForUrls() {
const ts = GmailApp.search('http');
let html = "";
ts.forEach((t,i) => {
t.getMessages().forEach(m => {
html += `<br>from: ${m.getFrom()} to: ${m.getTo()} msg: ${m.getPlainBody()}`;
});
});
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput("<textarea>" + html + "</textarea>"),'String Search');
}
,
没有内置搜索功能,您需要遍历所有消息及其正文
在 Apps Script 中,您可以按照以下方式进行操作:
function findThatLink() {
GmailApp.getInboxThreads().forEach(function(thread){
var messages = thread.getMessages()
messages.forEach(function(message){
if(message.getPlainBody().indexOf("http://www.example.com/page1/?utm_source=foo1234&utm_medium=bar"))
{
console.log("Success! The message id is " + message.getId())
}
})
})
}
请注意,不是在 plainBody
中搜索,您还可以使用 message.getBody()
找到您的链接,但在后一种情况下,您的链接将进行 url 编码,因此
http://www.example.com/page1/?utm_source=foo1234&utm_medium=bar
代替
http://www.example.com/page1/?utm_source=foo1234&utm_medium=bar
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。