2

对于一个项目,我需要获取当前打开的消息的正文并将该消息传递给 Web 服务以处理和存储它的一些数据。

我认为最好的方法是使用扩展来获取消息正文(以及一些附加信息),然后将其作为 Web 请求发送到服务以插入数据库。

但我不知道我应该如何处理这个问题。我按照一些教程让我开始使用 chrome 插件,但我找不到如何获取消息的正文。

我发现你需要它的内容脚本,但即便如此我也不知道。

谁能给我一个先机?

4

8 回答 8

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 编码的字符串返回。将此数据按原样发送到您的服务器,然后解密电子邮件并将其保存到您的数据库中。

于 2018-08-08T05:49:10.323 回答
1

这是我想出的代码,请务必在附加部分中添加按钮,并为它们提供一个带有计数的 id。这会等待 div 在单击或加载时到达,它会在加载后将附加的材料插入指定区域。无需担心随机类,因为它们是静态的。该代码已经运行了两年。

    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 根本不是必需的,因为您可以从页面中提取数据

于 2015-03-24T06:43:55.387 回答
1

这就是你的过程应该是:

  1. 打开邮件后,您应该会在电子邮件正文或 gmail 中的某处看到一个按钮。

  2. 单击该按钮应复制电子邮件的正文并将其推送到 Web 服务器。

  3. 如果要自动复制粘贴消息,可以默认单击此按钮。

对于这个过程——

  1. 创建一个content_script.js文件并将按钮放置在 gmail DOM 中。

  2. 单击按钮后,发送一条消息至eventpage.js,该消息将包含当前打开的电子邮件的正文。请注意,我没有使用过background.js,而是eventpage.js因为谷歌要求您避免使用background.js,并且两者都相同,持久性差异不大。

  3. 您的网络服务器可以接收并存储消息。

如果您想避免按钮过程,那么content_script.js 应该自动查找电子邮件打开事件并重复上述过程。但我建议您保留该按钮,因为有时您可能会单击不想复制的消息。

于 2016-10-25T12:26:17.493 回答
1

这是一个老问题,但经过几天的尝试,我找到了答案。要获取电子邮件标题,请遍历包含电子邮件标题的 HTMLCollection,该电子邮件标题可以通过类名 hP 找到:

var list= document.getElementsByClassName("hP");
for (var i = 0; i < list.length; i++) {
    console.log(list[i].innerText);
}

要获取电子邮件正文,请遍历包含电子邮件正文(类 ii)的 HTMLCollection:

var list= document.getElementsByClassName("ii");
for (var i = 0; i < list.length; i++) {
    console.log(list[i].innerText);
}
于 2018-05-14T23:36:38.650 回答
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 选择器...

祝你好运!

于 2012-12-19T02:27:21.673 回答
0

我不确定您的项目的确切要求是什么,但是是否可以只设置一个电子邮件地址来将这些电子邮件转发到?

从那里,您只需要以您的首选语言设置服务器来检查新电子邮件并处理它们(过滤内容,插入数据库等)。

好处:

  • 您没有被锁定使用 Chrome + 扩展程序
  • 您可以使用任何浏览器、设备、电子邮件应用程序来转发电子邮件
  • 您无需破译凌乱的 Gmail HTML
  • 更改 Gmail 中的 HTML/JS/CSS 不会破坏您的内部流程
  • 无需维护/更新 Chrome 扩展,事情会发生变化(他们会)
于 2013-05-29T16:31:55.273 回答
0

这很难。正如@frenetix 指出的那样,您可以获取所需元素的 ID 并遵循他(或她)的方法。困难的是,Google 实际上几乎每次加载 Gmail 时都会更改元素 ID,这几乎是不可能的。

您可以做的一件事是假设您(或用户)正在单击撰写窗口。然后您可以执行“document.activeElement”来获取正确的 DOM 元素。这至少会让你更进一步能够做你想做的事,尽管它还没有完全实现。

祝你好运。我现在在这个领域工作,这很艰难。

于 2013-08-05T17:49:50.567 回答
-1

Chrome 扩展程序本质上是用 JavaScript 编写的。如果至少对 JavaScript 有一些了解,你打算做的事情将非常困难。以下是一些提示: 要访问网站元素,我建议您学习使用 JavaScript 进行 DOM 操作。要将数据发送到网站,您将不得不使用 HTTPRequests (AJAX)。

于 2012-12-14T23:33:07.243 回答