对于一个项目,我需要获取当前打开的消息的正文,并将该消息传递给Web服务,以便处理和存储它的一些数据。
我认为最好的方法是使用扩展来获取邮件正文(以及一些其他信息),然后将其作为webrequest发送到服务以插入数据库。
但我不知道应该如何应对。我按照一些教程让我开始使用chrome插件,但是我找不到如何获取消息的正文。
我发现你需要内容脚本,但即便如此,我也不知道。
有谁可以给我一个开头呢?
答案 0 :(得分:2)
每封电子邮件都有自己的唯一消息ID。
使用content.js
从元素中获取“ messageId”,然后将其传递给Gmail API
以获取电子邮件数据。
示例:
<div class="adn ads" style="display:" data-message-id="189******56e***3" data-legacy-message-id="189******56e***3">
API以各种格式返回电子邮件的数据。其中一种是“原始”格式,该格式将完整的电子邮件正文作为base64url编码的字符串返回。将此数据直接发送到您的服务器,然后解密电子邮件并将其保存到数据库。
答案 1 :(得分:1)
以下是我提出的代码,请务必在附加部分添加按钮,并为其提供带有count的ID。这等待div在加载时到达click或onload它将附加的材料插入指定的区域。不需要担心随机类,因为它们是静态的。该代码已经工作了两年。
window.addEventListener("DOMNodeInserted", function(event) {
//TEST TO SEE WHERE CSS IS AT
// $(event.target).append($(event.target).parent()[0].className);
if($(event.target).parent()[0].className == 'oc gU')
{
//ADD SEND BUTTON FOR MESSAGES
//SUBJECT OF ENTIRE EMAIL GLOBAL
var subject = $(event.target).parents().eq(28).children(1).find(".hP").text();
//GET DATA EMAIL AND NAME
//Can assign via id or data-name and jid for email
var imageid = $(event.target).parents().eq(18).find("img[jid]").attr("id");
//THIS IS THE SEND BUTTON IN REPLAY ADD A BUTTON NEXT TO IT WITH THIS
$(event.target).parents().eq(1).find(".gU.Up").children(0).append("addbuttonid here");
//set click event for button
$('#'+addbuttonid).click(function(){
//TO DO HERE
//BODY FROM the REPLY MESSAGE
var body = $(event.target).parents().eq(11).find('.Am').text();
//PREVIOUS THREAD MESSAGES OPTIONAL
var body = body + $(event.target).parents().eq(11).find('.gmail_extra').text();
});
}
else if($(event.target).parent()[0].className == "aCi")
{
//THREAD MESSAGE
//GET EMAIL SUBJECT
var subject = $(event.target).parents().eq(17).children(1).find(".hP").text();
//GET TO INFO
var to = $(event.target).parents().eq(7).find('.g2');
//GET NAME AND EMAIL
var imageid = $(event.target).parents().eq(7).find("img[jid]").attr("id");
var value = $("#\\"+imageid).attr("jid");
var vname = $("#\\"+imageid).attr("data-name");
//GET DOCUMENT BODY
var tmp = $(event.target).parents().eq(6).find(".gs");
var body = tmp.text();
//GET DOCUMENT DATE
var date = $(event.target).parents().eq(7).find('.g3').attr('title');
date = date.replace(" at ", " ");
//ADD THE BUTTONS HERE WITH INITIAL VALUES
$(event.target).parents().eq(6).append('addbutton2');
$("#"+addbutton2).click(function(event){
var email = $("#\\"+$(this).attr("data-imageid")).attr("jid");
var name = $("#\\"+$(this).attr("data-imageid")).attr("data-name");
var body = $(this).attr("data-body");
//TOD FOR BUTTON NEXT TO REPLY ICON ON THREAD AS OPENED
});
}
});
正如您在此代码中看到的,您现在可以在回复部分或线程中的任何消息中添加按钮i gmail UI,以及您的欢迎:)。 这是唯一的代码,除非你自己通过Chrome扩展工作。 Gmail.js或使用API根本不是必需的,因为您可以从页面中提取数据
答案 2 :(得分:1)
这是您的流程应该是:
当邮件打开时,您应该会在电子邮件正文或Gmail中的某个位置看到一个按钮。
点击该按钮应复制电子邮件的正文并将其推送到网络服务器。
如果您想自动复制粘贴邮件,可以默认点击此按钮。
对于这个过程 -
创建一个content_script.js
文件并将该按钮放在gmail DOM中。
点击该按钮后,向eventpage.js
发送消息,该消息将包含当前打开的电子邮件正文。
请注意,我没有使用background.js
,而是使用eventpage.js
,因为Google要求您避免使用background.js
,并且两者都是相同的,但持久性几乎没有差异。
您的网络服务器可以接收消息并存储它。
如果您想避免按钮处理,则content_script.j
应自动查找电子邮件消息打开事件并重复上述过程。但我建议你保留按钮,因为有时你可能会点击你不想复制的邮件。
答案 3 :(得分:0)
如果我必须这样做,我会尝试在GMAIL客户端上找到包含正文的DIV的ID ... 使用jQuery抓取DIV的HTML或文本内容非常简单......看看:http://api.jquery.com/html/
一个简单的jQuery选择器看起来像这样:
$("#gmailsBodyDivID").html()
如果jQuery不是一个选项,你可以使用JavaScript getElementByID
(http://www.w3schools.com/jsref/met_doc_getelementbyid.asp)获取DIV
最后,如DudeOnRock所述,您应该对您的Web服务使用Ajax请求。
困难的部分是知道Gmail如何命名你正在寻找的DIV ...我只是快速浏览一下,我的,有一些奇怪的命名......
<div id=":w1" class="ii gt adP adO"><div id=":w2">
我不确定“:w1”或“:w2”代表什么,也不知道如何将它们与jQuery选择器一起使用......也许更有知识的人可能会在那里发光。
...所以我想你应该首先关注那个......
如果ID证明很难,你可能想要按类名使用jQuery选择器......
祝你好运!答案 4 :(得分:0)
我不确定您的项目的具体要求是什么,但是可以设置一个电子邮件地址来转发这些电子邮件吗?
从那里开始,您只需要使用首选语言设置服务器以检查新电子邮件并处理它们(过滤内容,插入数据库等)。
优点:
答案 5 :(得分:0)
很难。正如@frenetix指出的那样,你可以获取你想要的元素的ID,并遵循他(或她)的方法。很难的是,Google实际上几乎每次加载Gmail时都会更改元素ID,这几乎是不可能的。
您可以做的一件事是假设您(或用户)正在点击撰写窗口。然后你可以做“document.activeElement”来获得正确的DOM元素。这至少可以让你进一步做到你想要做的事情,尽管还没有完成。
祝你好运。我现在正在这个领域工作,这非常艰难。答案 6 :(得分:0)
这是一个老问题,但经过几天的尝试后我找到了答案。 要获取电子邮件标题,请迭代HTMLCollection,其中包含可以使用类名hP找到的电子邮件标题:
var list= document.getElementsByClassName("hP");
for (var i = 0; i < list.length; i++) {
console.log(list[i].innerText);
}
获取电子邮件正文,迭代包含电子邮件正文的HTMLCollection(第ii类):
var list= document.getElementsByClassName("ii");
for (var i = 0; i < list.length; i++) {
console.log(list[i].innerText);
}
答案 7 :(得分:-1)
Chrome扩展程序基本上是用JavaScript编写的。如果没有至少对JavaScript的一些理解,你打算做的事情会非常困难。以下是一些指示:为了访问网站元素,我建议您了解使用JavaScript进行DOM操作。要将数据发送到网站,您将不得不使用HTTPRequests(AJAX)。