从收到的Gmail邮件中获取电子邮件地址


33

我如何导出向每个给我发送电子邮件的人的包含电子邮件地址的列表?我已将所有邮件存档。


deep-email-extractor.com是您的朋友。付费但安全,有保障并使用两步密码。我几年前买了它,仍然用起来很方便
Tino Mclaren

我还不能发布答案(没有足够的代表),但是此Jerry Neumann在Python中的答案效果很好!
巴斯基(Basj)'17年

Answers:


13

我对所有复杂的答案(包括一些额外的工具)感到惊讶!您收到的每封电子邮件都将其地址添加到Gmail的“联系人”部分的“所有联系人”(而不是“我的联系人”)中。导出那一个,您就完成了(或者我在您的问题中漏了一些东西)。


假设此人仍然可以访问Gmail帐户,而不是简单的邮件存档,那将很好用。好的解决方案!
布拉德(Brad)2014年

是的,但是在提取工具上使用联系人有一个警告,您可能已经弄糟了您的联系人,我们很多人在我们按照收银机的建议存储邮件时“整理”时会做很多事情。此时,您现在不确定是否拥有“全部”电子邮件地址?我当时处于这种情况,并且在这里查看了所有答案,starbanana一个很简单,是最优雅和最可信赖的(它使用两步身份验证和应用专用密码),并且直接从我的PC连接到gmail,因此中间没有人在听。
蒂诺·麦克拉伦2015年

2
仅当您启用该设置时,才如此。虽然它是默认设置,但您可以轻松将其关闭。请参阅:停止Gmail的自动创建联系人
强麦

28

这是发挥Google Apps脚本功能的地方。如果将以下脚本粘贴到新的Google Spreadsheet中(工具,脚本编辑器,请按bug图标以对脚本进行身份验证),则会根据编号自动创建新的表格存在标签。之后,将添加电子邮件地址。

function getEmails() {
  // set spreadsheet and retrieve labels
  var ss = SpreadsheetApp.getActiveSpreadsheet();  
  var labels = GmailApp.getUserLabels(), emptyLabels = [];

  // itterate through the labels
  for (var i=0; i<labels.length; i++) {

    try {
      // create sheets and clear content
      var sh = ss.getSheetByName(labels[i].getName()) || 
      ss.insertSheet(labels[i].getName(), ss.getSheets().length);
      sh.clear();

      // get all messages
      var eMails = GmailApp.getMessagesForThreads(
        GmailApp.search("label:" + labels[i].getName()))
          .reduce(function(a, b) {return a.concat(b);})
          .map(function(eMails) {
        return eMails.getFrom() 
      });

      // sort and filter for unique entries  
      var aEmails = eMails.sort().filter(function(el,j,a)
        {if(j==a.indexOf(el))return 1;return 0});  

      // create 2D-array
      var aUnique = new Array();  
      for(var k in aEmails) {
        aUnique.push([aEmails[k]]);
      }

      // add data to corresponding sheet
      sh.getRange(1, 1, aUnique.length, 1).setValues(aUnique);
    } catch (e) {
      emptyLabels.push(labels[i].getName());
    }
   }
   ss.toast("These sheets are empty: " + emptyLabels);
}

使用该SPLIT函数提取名称以查找重复项。系统文件夹将被忽略,例如INBOXAll Items

注意:脚本可能需要一些时间来执行,这当然取决于电子邮件的数量


@ MG1检查了脚本,它在空标签上失败。修改后的代码,以便出现一条消息,其中提到了空标签。
Jacob Jan Tuinstra

7

更新2017

Starbanana已将其名称更改为Deep-etract-extractor,并且看起来还像改进了App UI并使其可用于多个帐户(刚刚登录到我的应用程序后才发现),更改了以下链接以反映这一点。

原始答案

如果您需要快速的桌面应用程序(而不是脚本),请考虑一下。

我做了很多搜索工作,以查找标签级别的应用程序,然后从deep-email-extractor找到了Gmail Email Exporter 。

这是一个付费应用程序(与它们无关),但价格便宜,您可以从特定标签或所有Gmail帐户中导出电子邮件地址。

因此,在您的情况下,请使用过滤器将收到的所有电子邮件放入标签中,并使用以上内容导出到CSV文件。


1
对于Mac用户而言,更便宜的替代方法是电子邮件联系人提取器(itunes.apple.com/us/app/email-contacts-extractor/…)。全披露:我自己开发了它,因为我觉得其他产品太贵或需要在线访问我的电子邮件。
hpique 2013年

如果您能像他们一样为20个地址或更少的地址创建一个版本,那就太好了。
丹·罗森斯塔克

starbanana.com现在也可以从体内提取电子邮件,我刚刚尝试过,多线程处理(同时做15个标签)也给人留下了深刻的印象。
蒂诺·麦克拉伦

6

基于@ jacob-jan-tuinstra的答案。根据我的需要进行了一些小的修改,也许其他人会觉得有用。

使用搜索,不被标签打乱,也对大型收件箱进行分块。

您可以在收件箱中使用的任何查询都可以填满“您的GMAIL搜索查询将在此处”部分。

function getEmails() {
  // set spreadsheet and retrieve labels
  var query = 'YOUR GMAIL SEARCH QUERY GOES HERE',
    ss = SpreadsheetApp.getActiveSpreadsheet(),
    sh = ss.getSheetByName(query) || ss.insertSheet(query, ss.getSheets().length),
    uniqueEmails = {},
    errors = [],
    // max chunk size
    chunkSize = 500,
    currentChunk = 0,
    threads,
    messages,
    i,
    j,
    k,
    msg,
    tos;
  sh.clear();
  while (currentChunk === 0 || threads.length === chunkSize) {
    try {
      // grab threads that match the query one chunk at a time
      threads = GmailApp.search(query, chunkSize * currentChunk, chunkSize);
      // grab corresponding messages from the threads
      messages = GmailApp.getMessagesForThreads(threads);
      for (i = 0; i < messages.length; i++) {
        msg = messages[i];
        for (j = 0; j < msg.length; j++) {
          // get the from
          uniqueEmails[msg[j].getFrom()] = true;
          // get the reply to
          uniqueEmails[msg[j].getReplyTo()] = true;
          // grab from the to field as well
          // this has a bug for people with commas in their names
          // tos = msg[j].getTo().split(',');
          // for (k = 0; k < tos.length; k++) {
          //  uniqueEmails[tos[k]] = true;
          // }
        }
      }
      currentChunk += 1;
    } catch (e) {
      errors.push(e);
    }
  }
  // create 2D-array
  var aUnique = [];
  for (k in uniqueEmails) {
    aUnique.push([k]);
  }

  // add data to corresponding sheet
  sh.getRange(1, 1, aUnique.length, 1).setValues(aUnique);
}

谢谢您,您的讲演技巧对我来说非常完美!您是否还可以添加从邮件正文中检索电子邮件地址的选项,非常感谢。谢谢。

5

以下应用程序是免费的,并且效果很好!

http://www.labnol.org/internet/extract-gmail-addresses/28037/


另一个伟大的实用程序。但是我还没有尝试。
Moiz Tankiwala 2014年

1
我永远不会相信任何“在线应用程序”,因此有很多骗局欺骗了un / pw和您的所有电子邮件地址。使用“已安装的应用程序-HTTPS连接”。
蒂诺·麦克拉伦2015年

我同意您需要保持谨慎,但Labnol背后的家伙是个好人,他发表了很多真正有用的东西。如果你不相信它,但有一点技术可以经常去,抓住他那篇文章链接到src代码,并推出自己:ctrlq.org/code/...
RedYeti

5

困惑/非技术/不知道该怎么办?

逐步尝试以下步骤,并感谢https://webapps.stackexchange.com/a/47930/6329

步骤1. drive.google.com

步骤2.新的电子表格

步骤3.工具>脚本编辑器

第4步。关闭简介,使用关闭按钮弹出

步骤5.粘贴代码

function getEmails() { 
  // http://stackoverflow.com/a/12029701/1536038  
  // get all messages      
  var eMails = GmailApp.getMessagesForThreads(
    GmailApp.search('after:2012/1/14 before:2013/8/15'))
      .reduce(function(a, b) {return a.concat(b);})
      .map(function(eMails) {
    return eMails.getFrom() 
  });

  // sort and filter for unique entries  
  var aEmails = eMails.sort().filter(function(el,j,a)
    {if(j==a.indexOf(el))return 1;return 0});  

  // create 2D-array
  var aUnique = new Array();  
  for(var k in aEmails) {
    aUnique.push([aEmails[k]]);
  }

  // add data to sheet
  SpreadsheetApp.getActiveSheet().getRange(1, 1, aUnique.length, 1)
    .setValues(aUnique);
} 

步骤6.将光标置于第一行中的单词“ getEmails”内

步骤7.在菜单栏中单击上方的播放三角形按钮

步骤8。它要求您进行身份验证,然后执行此操作

步骤9.如果尚未运行,请再次单击“播放”按钮

步骤10.检查您的原始电子表格,其中将包含电子邮件。


4
  1. 导航到列表。选择复选框选项下拉列表,然后全选。
  2. [在顶部,您将获得一个超链接选项,以选择列表中的所有对话。单击它。]更新:此步骤不起作用,只会让您一次只能做25次,真可惜!
  3. 然后在[更多]下拉式选单下,选取类似的筛选器讯息。
  4. 在过滤器对话框中,“发件人”文本框将突出显示。这些都是发件人地址。
  5. 复制它。
  6. 将其粘贴到HTML编辑器(如Notepad ++或Visual Studio)中。
  7. 现在,您只需要搜索并替换单词OR,用;或替换即可,
  8. 重新复制列表并粘贴到您的消息中。

最好只是给出答案。无需背后的故事。:-)
Yosi Mor

4

唯一的方法是

  1. 全部导出为.txt(请参阅:将Gmail邮件导出为文本或HTML文件
  2. 遍历所有代码,并在单独的数据库中使用grep“ From:”行。

注意:如果对步骤1使用imapsize(免费),然后将备份另存为“%FROM-电子邮件的发件人”,则目录中将它们清晰可见。


我以前很怕那个。不过谢谢!
Brad 2010年

1

我想出了一种使用Mac Mail和地址簿为Mac用户执行此操作的方法,而无需下载其他软件。这适用于Mac Mail 4.6和Address Book 5.0.3。不知道它是否适用于其他版本。这对于其他IMAP电子邮件程序(例如Thunderbird)可能也类似,但是我不能保证。

步骤如下:

  1. 在Mac Mail中设置您的Gmail帐户。确保传入邮件服务器是“ imap.gmail.com”。您可以在工具栏>邮件>首选项>帐户下找到此邮件服务器。
  2. 在Gmail中,为要提取其电子邮件地址的电子邮件创建标签。
  3. 在Gmail中,按上方“标签”标签所有想要的电子邮件。
  4. 在Gmail中,转到“设置”>“标签”,然后选中创建的新标签“在IMAP中显示”的框。
  5. 重新启动Mac Mail,以便新的Gmail标签同步。
  6. 打开通讯录。如果将通讯录用于通讯录,则需要备份通讯录,因为您需要删除通讯录中的所有通讯录。我相信您可以通过“文件”>“导出”>“地址簿存档”来执行此操作。除了导出Gmail电子邮件外,我不使用通讯簿,因此我无法提供很好的建议。删除通讯录中的联系人后果自负。
  7. 在通讯簿中,删除所有联系人。通过选择一个联系人,然后按Command + a并按Delete键,您应该能够做到这一点。
  8. 在Mac Mail中,找到您的IMAP文件夹。窗口左侧应有一列,其中包含所有邮箱。如果未转到顶部工具栏,请选择“视图”>“显示邮箱”或按Command + Shift + M。IMAP文件夹将位于“提醒”,“ RSS”,“在我的Mac上”等下方的列的底部。您应该看到之前设置的Gmail帐户名称,左侧带有下拉箭头。
  9. 在Mac Mail中,单击邮箱旁边的下拉箭头。这将显示一个文件夹列表,并应将您在Gmail中创建的标签显示为文件夹。通过单击选择此文件夹。
  10. 在“邮件”窗口中的Mac Mail中,该窗口现在应为您显示Gmail标签的所有电子邮件),在列表中选择所有电子邮件。转到顶部的工具栏,选择“消息”>“将发件人添加到地址簿”或按Shift+ Command+ Y。现在,您的Gmail标签的所有发件人都应位于通讯簿中。
  11. 在通讯簿中,您现在可以通过将其导出为vCard,以在所需的任何程序中使用,方法是转到工具栏,然后选择“文件”>“导出”>“导出vCards”。您甚至可以将其导入Google通讯录。如果您需要CSV文件,很遗憾,您将需要将vCard导入另一个程序(Google Contacts可以使用)并重新导出,因为您无法从Mac Mail中导出CSV。

希望这可以帮助!这有点麻烦,但是对我有用,经过几次操作后很简单。


0

MineMyMail通过IMAP提取您的所有邮件,然后从中提取电子邮件地址。

您可以通过选择“已发送邮件”文件夹/标签来选择要搜索的文件夹。


MineMyMail是否值得信赖?我去了他们的网站,Chrome浏览器警告我证书已过期。缺少适当的HTTPS证书并要求用户输入其Gmail用户名和密码绝对令人恐惧。这使我怀疑该网站可能会提取电子邮件并将其用于自己的垃圾邮件发送或出售给其他垃圾邮件发送者。
Moiz Tankiwala 2014年

0

IMAP Addresses Exporter是一个Mac App,可连接到任何IMAP电子邮件帐户并提取每个发件人地址,也从先前设置的文件夹/标签中提取。公平地说,我必须强调它是由我公司开发的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.