Получить адреса электронной почты из полученных сообщений Gmail


33

Как я могу экспортировать список, содержащий адреса электронной почты для всех, кто прислал мне электронное письмо? У меня есть все сообщения в архиве.


deep-email-extractor.com ваш друг. Оплачивается, но безопасно, надежно и использует два шага пароли. Я купил его несколько лет назад и до сих пор пользуюсь им, очень удобно
Тино Макларен

Я пока не могу опубликовать ответ (недостаточно репов), но этот ответ Джерри Неймана здесь, в Python, работает чудесно!
Basj

Ответы:


13

Я весьма удивлен всеми сложными ответами, подразумевающими некоторые дополнительные инструменты! Каждое полученное вами электронное письмо имеет свой адрес, добавленный в «Все контакты» (в отличие от «Мои контакты») в разделе «Контакты» Gmail. Экспортируйте это, и все готово (или я что-то пропустил в вашем вопросе).


Это было бы прекрасно, если бы у человека все еще был доступ к учетной записи Gmail, а не к простому архиву сообщений. Хорошее решение!
Брэд

Да, согласен, но есть одно предостережение об использовании контактов вместо инструментов извлечения, вы, возможно, ошиблись с вашими контактами, что многие из нас делают, когда мы «приводим в порядок», как предлагает ОП, поскольку его сообщения архивируются. На данный момент вы не уверены, что у вас есть «все» ваши адреса электронной почты? Я оказался в такой ситуации, и, посмотрев на все ответы здесь, Starbanana был довольно элегантным и заслуживающим доверия (он использует двухэтапную аутентификацию и пароли, специфичные для приложения) и прямое соединение с моего компьютера в gmail, так что ни один человек в середине не слушал ,
Тино Макларен

2
Это верно только в том случае, если эта настройка включена. Хотя это по умолчанию, вы можете легко отключить его. См: Стоп Gmail автоматически создавать контакты
эль

28

Вот тут-то и проявляется мощь скрипта Google Apps. Если вы вставите следующий скрипт в новую таблицу Google (Инструменты, редактор скриптов, нажмите значок ошибки, чтобы аутентифицировать скрипт), то новые листы будут автоматически созданы на основе числа наклеек присутствует. После этого адреса электронной почты будут добавлены.

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функцию для извлечения имен, чтобы найти дубликаты. Системные папки игнорируются, как INBOXили All Items.

Примечание: выполнение скрипта может занять некоторое время, что, конечно, зависит от количества писем


@ MG1 проверил скрипт, и он не работает на пустых ярлыках. Пересмотрен код, чтобы появилось сообщение с упоминанием пустых меток.
Джейкоб Ян Туинстра

7

Обновление 2017

Starbanana изменила свое название на deep-email-extractor, и, похоже, оно обновило интерфейс приложения и заставило его работать с несколькими учетными записями (обнаружил, что только что вошел в мое приложение), изменив ссылку ниже, чтобы отразить это.

Оригинальный ответ

Если вам нужно быстрое настольное приложение (не скрипт), подумайте об этом.

Я довольно долго искал приложение, которое работает на уровне меток, и нашел Gmail Email Exporter от deep-email-extractor .

Это платное приложение (я не имею к ним никакого отношения), но оно дешевое, и вы можете экспортировать адреса электронной почты из определенных ярлыков или из всей учетной записи Gmail.

Таким образом, в вашем случае поместите всю полученную электронную почту в ярлык с помощью фильтра и используйте описанное выше для экспорта в файл CSV.


1
Более дешевой альтернативой для пользователей Mac является Email Contacts Extractor ( itunes.apple.com/us/app/email-contacts-extractor/… ). Полное раскрытие: я разработал его сам, потому что я чувствовал, что другие предложения были слишком дорогими или требовали онлайн-доступ к моей электронной почте.
hpique

Было бы здорово, если бы вы могли сделать версию для 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);
}

Ваш scrpit отлично работает для меня, спасибо! Можете ли вы добавить опцию для извлечения адресов электронной почты из тела письма, очень ценится. Спасибо.

5

Следующее приложение бесплатно и прекрасно работает!

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


Еще одна замечательная утилита. Но я еще не попробовал.
Мойз Танкивала

1
Я бы НИКОГДА не доверял любому «онлайн-приложению», так как многие мошенники стали использовать un / pw и все ваши адреса электронной почты. Перейти с установленным приложением - HTTPS-соединение.
Тино Макларен

Я согласен, что вы должны быть осторожны, но парень из Labnol - хороший парень, который опубликовал массу действительно полезных материалов. Если вы не доверяете этому, но немного технический, вы всегда можете пойти и взять код src, на который он ссылается из этой статьи, и написать
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. Теперь вам просто нужно выполнить поиск и заменить слово ИЛИ, заменить на ;или ,.
  8. Скопируйте список и вставьте его в ваше сообщение.

Лучше просто дать ответ. Нет необходимости в истории, стоящей за этим. :-)
Йоси Мор

4

Единственный способ сделать это

  1. Экспортировать все как .txt (см .: Экспорт сообщений Gmail в текстовые или HTML-файлы )
  2. Переберите все это и выполните grep строки «From:» в отдельной базе данных.

Примечание. Если вы используете imapsize (бесплатно) для шага 1, сохраните резервные копии как «% FROM - отправитель электронного письма», и они будут видны в вашем каталоге.


Я боялся этого. Спасибо хоть!
Брэд

1

Я нашел способ сделать это для пользователей Mac, использующих Mac Mail и адресную книгу, без необходимости загружать дополнительное программное обеспечение. Это работает с Mac Mail 4.6 и Адресной книгой 5.0.3. Не уверен, работает ли он для других вер или нет. Это может работать аналогично для других программ электронной почты IMAP, таких как Thunderbird, но я не могу ручаться за это.

Вот шаги:

  1. Настройте свою учетную запись Gmail в Mac Mail. Убедитесь, что сервер входящей почты "imap.gmail.com". Вы можете найти его на панели инструментов> Почта> Настройки> Аккаунты.
  2. В Gmail создайте метку для писем, для которых вы хотите извлечь адреса электронной почты.
  3. В Gmail пометьте все электронные письма, которые вы хотите, на ярлык выше.
  4. В Gmail перейдите в «Настройки»> «Метки» и установите флажок для новой созданной вами метки с надписью «Показать в IMAP».
  5. Перезапустите Mac Mail, чтобы новая метка Gmail синхронизировалась.
  6. Откройте адресную книгу. Если вы используете адресную книгу для своих контактов, вам необходимо создать резервную копию ваших контактов, потому что вам нужно удалить все контакты в адресной книге. Я считаю, что вы можете сделать это с помощью File> Export> Address Book Archive. Я не использую адресную книгу, кроме как для экспорта электронных писем Gmail, поэтому я не могу дать хороший совет по этому вопросу. Удалите контакты из адресной книги на свой страх и риск.
  7. В адресной книге удалите все ваши контакты. Вы должны быть в состоянии сделать это, выбрав один контакт, нажав Ctrl + a и нажав клавишу удаления.
  8. В Mac Mail найдите папку IMAP. В левой части окна должен быть столбец со всеми вашими почтовыми ящиками. Если нет, перейдите на верхнюю панель инструментов, выберите «Просмотр»> «Показать почтовые ящики» или нажмите клавиши «Command» + «Shift» + «M». Папка IMAP будет находиться в нижней части столбца ниже «Напоминания», «RSS», «На моем Mac» и т. Д. Вы должны увидеть имя своей учетной записи Gmail, которую вы создали ранее, со стрелкой раскрывающегося списка слева.
  9. В Mac Mail щелкните стрелку раскрывающегося списка рядом с вашим почтовым ящиком. Это покажет вам список папок и метку, созданную вами в Gmail. Выберите эту папку, нажав на нее.
  10. В «Почте Mac» в окне «Сообщения», в котором теперь должны отображаться все ваши электронные письма для вашей метки Gmail, выберите все электронные письма в списке. Перейдите на верхнюю панель инструментов, выберите Сообщения> Добавить отправителей в адресную книгу или нажмите Shift+ Command+ Y. Все отправители вашей метки Gmail теперь должны быть в адресной книге.
  11. В адресной книге теперь вы можете экспортировать контакты в виде vCards для использования в любой программе, которая вам нравится, перейдя на панель инструментов и выбрав File> Export> Export vCards. Вы даже можете импортировать обратно в Google Контакты. Если вам нужен файл CSV, к сожалению, вам нужно будет импортировать визитные карточки в другую программу (контакты Google работают) и повторно экспортировать, потому что вы не можете экспортировать CSV из Mac Mail.

Надеюсь это поможет! Это немного громоздко, но работает для меня и довольно легко после того, как вы сделаете это пару раз.


0

MineMyMail получает все ваши сообщения через IMAP, а затем извлекает адреса электронной почты из него.

Вы можете выбрать, какие папки он ищет, выбрав папку / ярлык «Отправленная почта».


MineMyMail заслуживает доверия? Я пошел на их сайт, и Chrome предупредил меня, что срок действия сертификата истек. Отсутствие надлежащего сертификата HTTPS и просьба к пользователям ввести свое имя пользователя и пароль Gmail, безусловно, страшно. Это заставляет меня подозревать, что сайт может извлекать электронные письма и использовать их для своего спама или продажи другим спамерам.
Мойз Танкивала

0

IMAP Addresses Exporter - это приложение для Mac, которое подключается к любой учетной записи электронной почты IMAP и извлекает адрес каждого отправителя, в том числе из папок / ярлыков, которые вы указали ранее. Справедливости ради, должен подчеркнуть, что он разработан моей компанией.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.