【问题标题】:get gmail email contents and transfer to google spreadsheet and arrange accordingly获取 gmail 电子邮件内容并传输到 google 电子表格并进行相应安排
【发布时间】:2016-11-24 05:49:23
【问题描述】:

嗨,我只是想知道我是否可以提取标签上某些电子邮件的所有电子邮件内容并将它们放入谷歌电子表格中。打开每封电子邮件并将每个数据复制并粘贴到电子表格中以进行相应的排列非常累人.我试图在 vb 中创建一个宏来安排电子邮件,但我仍然需要打开每封电子邮件才能获取数据并将它们放在我的 excel 文件中。

这是我要根据标签排列的示例电子邮件内容,每封电子邮件将按行和列显示:

CO 类型:仅限 IV

自动类型:手动 日期:2016 年 11 月 21 日下午 1:49:11 车型:三菱
公司地址:匹克 价格:8,000.00

CA:迈克尔,约翰 SPO:单人 地址:UNIT 3 San Franciscvo,加拿大 LM : 牡蛎
SOI:工厂工人 POS:第一副 地址:加利福尼亚州圣地亚哥 3 号单元

我想要的是根据我创建的标题来排列它们:这是在每封邮件开始之前,直到冒号 (:) 标记。我已经通过搜索单词的开头直到冒号并在excel上使用剪切和粘贴来完成它,但由于手动打开和粘贴我的文件上的电子邮件仍然需要很多时间。有什么解决方法吗?

【问题讨论】:

    标签: email google-apps-script


    【解决方案1】:

    您可以使用Save Gmail add-on 将电子邮件元数据保存到 Google 表格。它还将消息保存到云端硬盘。 (免责声明:我是插件的作者)

    可以使用附加到 Google Sheet 的 Google Script 来完成,类似于 sn-p。

    function getGmailData() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var threads = GmailApp.search("is:unread in:inbox", 0, 20);
      for (var t=0; t<threads.length; t++) {
        sheet.appendRow([threads[t].getDate(), threads[t].getId(), threads[t].getFirstMessageSubject()])
      }
    }
    

    【讨论】:

    • 感谢您的回复,但我正在寻找要在电子表格上排列的数据,因为我仍然需要编辑其中的一些信息
    • 哦,是的,但似乎我的 getdate() 有问题。
    • Google 脚本运行良好,谢谢!必须将线程[t].getDate() 更改为线程[t].getLastMessageDate()。要深入了解邮件详细信息,请使用 GmailApp.getMessagesForThread(threads[t]) 并查看developers.google.com/apps-script/reference/gmail/gmail-message
    【解决方案2】:

    我在 Google App Script 上编写了您想要的代码,并制作了一个 YouTube 视频,详细解释了这一点。您可以通过以下链接观看:

    https://www.youtube.com/watch?v=gdgCVqtcIw4

    但是,如果您想从电子邮件正文中提取特定文本,则需要使用正则表达式。我的视频系列的第 2 部分解释了如何实现这一点。您可以在这里观看:

    https://youtu.be/nI1OH3pAz6s?t=9

    您还可以从我的博客中阅读完整的分步说明: https://codewondo.com/2021/07/29/gmail-emails-to-spreadsheet/

    您还可以通过以下链接从 GitHub 获取完整代码:

    【讨论】:

      【解决方案3】:

      是的,你可以做到。事实上,我有一个 Google 脚本可以做到这一点。我的脚本有一个 Web UI,您可以在其中设置一个前后日期字段和一个文件名字段。启动脚本后,它会获取所有电子邮件(不是 threads,Gmail 服务使用线程,如果您想搜索单个邮件,则需要使用 Gmail API),然后您可以输出有关它的任何内容到 Google 电子表格。

      我建议不要使用 VB,而是使用 GAS。您可以使用GmailApp.getUserLabelByName("MyLabel") 获取要从中提取消息的标签,然后使用.getThreads() 从标签中获取所有线程(对话)。

      阅读您可以使用线程 here 做什么以及您可以使用消息 here 做什么。我个人使用 Gmail API 并使用过

      queriedMessages =
            Gmail.Users.Messages.list(userInfo.mail, {
              'q': queryString,
              'pageToken': execProperties.nextPageId
            });
      

      然后我可以从单个消息中提取我想要的信息。查询字符串基本上是您输入 Gmail 以搜索电子邮件的内容,因此您可以使用类似 label:"This-label"

      【讨论】:

      • 你有这方面的视频教程吗?所以我可以很容易地得到 gmail 脚本的想法。因为我现在不熟悉 gmail 脚本。我需要尽可能快地完成这个过程,所以我不需要手动复制和粘贴电子邮件。非常感谢
      • @kkk 这是带有附加功能的基本 JavaScript。如果您了解 JavaScript,那么您实际上了解 GAS 的基础知识。之后只有限制和额外的功能需要考虑。你最好的朋友是谷歌自己的文档here。这不是 Gmail 脚本,而是 Google 脚本,这意味着它涵盖了从 Gmail 到文档、电子表格、日历等的所有内容。如果它在 G-Suite(现在称为)上,您可能可以编写脚本。它易于导航,因此请从您想要使用的内容开始,然后查找您需要的对象。
      【解决方案4】:

      回复有点晚,但希望我的回答可能对其他人有所帮助。我的插件刚刚发布,它确实完成了上面提到的功能:

      • 遍历昨天的电子邮件
      • 从中解析数据
      • 每天使用解析后的数据向电子表格添加新行

      这是附加链接:https://chrome.google.com/webstore/detail/email-parser-analytics/ilaecpapiiijoeijcffhnlhfjimammek

      这个插件是这种脚本的高级版本:

      //Variables of your choice here
      
        var sheet = '';
        var query = '';
        var array2d = getEmailsInbox(array2d, query);    
      
      //Proccess all emails that match query and add them into  2-dimensional array
      
        function getEmailsInbox(array2d, query){
        var emails = [];
        var thds = GmailApp.search(query);
        for(var i in thds){
          var msgs = thds[i].getMessages();
                  for(var j in msgs){
          var dt = msgs[j].getDate();
          var mail = msgs[j].getReplyTo();
          var subj = msgs[j].getSubject();
          var body = msgs[j].getPlainBody();
      
            emails.push([dt, mail, subj, body]);
      
          }
          }
          return emails;
        }
      
      
      //Function to add objects from 2 dimensional array to a spreadsheet as rows
      
          function appendInboxEmails(sheet, array2d){
            sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
          }
      
      
      //Put that function on trigger or run once
      
          function run() {
          if(typeof array2d !== 'undefined' && array2d.length > 0) {
                   appendInboxEmails(sheet, array2d);
                   array2d = [];
          }
          }
      

      【讨论】:

        猜你喜欢
        • 2018-07-30
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 2018-12-07
        • 1970-01-01
        • 2014-09-14
        相关资源
        最近更新 更多