Uzyskaj adresy e-mail z otrzymanych wiadomości Gmail

33

Jak mogę wyeksportować listę zawierającą adresy e-mail dla wszystkich, którzy przesłali mi e-mail? Mam wszystkie wiadomości zarchiwizowane.

Ćwiek
źródło
deep-email-extractor.com jest twoim przyjacielem. Płatny za, ale bezpieczny, bezpieczny i używa haseł dwuetapowych. Kupiłem go kilka lat temu i nadal go używam, całkiem przydatny
Tino Mclaren
Nie mogę jeszcze opublikować odpowiedzi (za mało powtórzeń), ale odpowiedź Jerry'ego Neumanna tutaj w Pythonie działa cudownie!
Basj

Odpowiedzi:

13

Jestem dość zaskoczony wszystkimi skomplikowanymi odpowiedziami sugerującymi dodatkowe narzędzia! Każdy otrzymany e-mail ma swój adres dodany do „Wszystkich kontaktów” (w przeciwieństwie do „Moich kontaktów”) w części Kontakty Gmaila. Wyeksportuj to i gotowe (lub coś przeoczyłem w twoim pytaniu).

Patrick Honorez
źródło
To by działało świetnie, zakładając, że osoba nadal ma dostęp do konta Gmail, a nie zwykłe archiwum wiadomości. Dobre rozwiązanie!
Brad
Tak, zgadzam się, ale jest jedno zastrzeżenie dotyczące korzystania z kontaktów zamiast narzędzi do wyodrębniania, być może pomyliłeś się ze swoimi kontaktami, wielu z nas robi to, gdy „sprzątamy”, jak sugeruje OP, gdy jego wiadomości są archiwizowane. W tym momencie nie jesteś pewien, czy masz „wszystkie” swoje adresy e-mail? Byłem w takiej sytuacji i po obejrzeniu wszystkich odpowiedzi tutaj starbanana była po prostu najbardziej elegancka i godna zaufania (używa dwuetapowego hasła do autoryzacji i aplikacji) oraz bezpośredniego połączenia z mojego komputera do Gmaila, więc nikt w środku nie słuchał .
Tino Mclaren,
2
Jest to prawdą tylko wtedy, gdy masz włączone to ustawienie. Chociaż jest to ustawienie domyślne, możesz łatwo je wyłączyć. Zobacz: Zatrzymaj Gmaila przed automatycznym tworzeniem kontaktów
ale
28

W tym miejscu włącza się moc Google Apps Script. Jeśli wkleisz poniższy skrypt w nowym arkuszu kalkulacyjnym Google (Narzędzia, edytor skryptów, naciśnij ikonę błędu, aby uwierzytelnić skrypt), nowe arkusze zostaną automatycznie utworzone na podstawie liczby obecnych etykiet. Następnie adresy e-mail zostaną dodane.

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);
}

Użyj SPLITfunkcji, aby wyodrębnić nazwy, aby znaleźć duplikaty. Foldery systemowe są ignorowane, takie jak INBOXlub All Items.

Uwaga: wykonanie skryptu może trochę potrwać, co oczywiście zależy od liczby wiadomości e-mail

Jacob Jan Tuinstra
źródło
@ MG1 sprawdził skrypt i nie działa na pustych etykietach. Zmieniony kod, aby pojawił się komunikat informujący o pustych etykietach.
Jacob Jan Tuinstra
7

Aktualizacja 2017

Starbanana zmieniła nazwę na ekstraktor do głębokich e-maili, a także wygląda na to, że przerobił interfejs aplikacji i sprawił, że działa na wielu kontach (odkryłem, że właśnie zalogowałem się do mojej aplikacji), zmieniłem link poniżej, aby to odzwierciedlić.

Oryginalna odpowiedź

Jeśli potrzebujesz szybkiej aplikacji komputerowej (nie skryptu), zastanów się nad tym.

Sporo szukałem aplikacji, która działa na poziomie etykiety, i znalazłem Gmail Email Exporter z deep-email-extractor .

To płatna aplikacja (nie mam z nimi nic wspólnego), ale jest tania i możesz eksportować adresy e-mail z określonych etykiet lub całego konta Gmail.

Więc w twoim przypadku umieść wszystkie otrzymane wiadomości e-mail w etykiecie za pomocą filtra i użyj powyższego, aby wyeksportować do pliku CSV.

LenPopLilly
źródło
1
Tańszą alternatywą dla użytkowników komputerów Mac jest ekstraktor kontaktów e-mail ( itunes.apple.com/us/app/email-contacts-extractor/... ). Pełne ujawnienie: opracowałem go sam, ponieważ czułem, że inne oferty były zbyt drogie lub wymagały dostępu online do mojej poczty e-mail.
hpique
Byłoby świetnie, gdybyś mógł zrobić wersję dla 20 lub mniej adresów, tak jak oni.
Dan Rosenstark,
starbanana.com teraz wyodrębnia również e-maile z ciała, właśnie go wypróbowałem, a wielowątkowość (robi 15 etykiet jednocześnie) niewiarygodnie szybko i pod wrażeniem.
Tino Mclaren,
6

Na podstawie odpowiedzi @ jacob-jan-tuinstra. Wprowadziłem kilka drobnych modyfikacji w celu dostosowania do moich potrzeb, być może inni uznaliby to za przydatne.

Korzysta z wyszukiwania, nie dzieli się według etykiet, a także tworzy porcje dla dużych skrzynek odbiorczych.

Część z napisem „TWOJE WYSZUKIWANIE GMAILOWEJ TUTAJ JEST TUTAJ” można wypełnić dowolnym zapytaniem, którego użyłbyś w swojej skrzynce odbiorczej.

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);
}
varblob
źródło
Twoja zdrapka działa dla mnie idealnie, dzięki! czy możesz dodać opcję pobierania adresów e-mail z treści wiadomości e-mail, co bardzo doceniamy. dzięki.
5

Następująca aplikacja jest darmowa i działa pięknie!

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

Komar
źródło
Kolejne świetne narzędzie. Ale jeszcze tego nie wypróbowałem.
Moiz Tankiwala
1
NIGDY nie ufałbym żadnej „aplikacji on-line”, tak wiele oszustw wymienia un / pw i wszystkie twoje adresy e-mail. Idź z zainstalowaną aplikacją - połączenie HTTPS.
Tino Mclaren,
Zgadzam się, że musisz być ostrożny, ale facet stojący za Labnol to dobry facet, który opublikował mnóstwo naprawdę pomocnych rzeczy. Jeśli nie ufasz, ale jesteś trochę techniczny, zawsze możesz pobrać kod src, do którego prowadzi link z tego artykułu, i rzucić własny: ctrlq.org/code/…
RedYeti
5

Zmieszany / Nietechniczny / Nie mam pojęcia, co robić?

Wypróbuj następujący krok po kroku i dzięki https://webapps.stackexchange.com/a/47930/6329

krok 1. drive.google.com

krok 2. nowy arkusz kalkulacyjny

krok 3. narzędzia> edytor skryptów

krok 4. zamknij okienko wprowadzenia za pomocą przycisku zamykania

krok 5. wklej kod

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);
} 

krok 6. umieść kursor na słowie „getEmails” w pierwszym wierszu

krok 7. kliknij przycisk trójkąta odtwarzania powyżej na pasku menu

krok 8. Prosi o uwierzytelnienie, zrób to

krok 9. ponownie kliknij przycisk odtwarzania, jeśli jeszcze nie został uruchomiony

krok 10. sprawdź oryginalny arkusz kalkulacyjny, a będzie on zawierał wiadomości e-mail.

Jason
źródło
4
  1. Przejdź do listy. Wybierz menu opcji wyboru i wybierz wszystko.
  2. [U góry pojawi się opcja hiperłącza, aby wybrać wszystkie rozmowy na liście. Kliknij.] Aktualizacja: Ten krok nie działa, pozwoli ci zrobić tylko 25 naraz, bummer!
  3. Następnie przejdź do menu Więcej i wybierz filtruj takie wiadomości.
  4. W oknie dialogowym filtru pole tekstowe Od zostanie podświetlone. To są wszystkie adresy z.
  5. Skopiuj to.
  6. Wklej go do edytora HTML, takiego jak Notepad ++ lub Visual Studio.
  7. Teraz wystarczy przeprowadzić wyszukiwanie i zamienić słowo LUB, zastąpić znakiem ;lub ,.
  8. Skopiuj listę i wklej do swojej wiadomości.
Jason
źródło
Lepiej po prostu dać odpowiedź. Nie ma potrzeby opowiadania za tym. :-)
Yosi Mor
4

Jedynym sposobem na to jest

  1. Eksportuj wszystko jako .txt (patrz: Eksportowanie wiadomości Gmaila do plików tekstowych lub HTML )
  2. Pętlę przez to wszystko i grep wiersze „From:” w osobnej bazie danych.

Uwaga: jeśli używasz imapsize (darmowy) dla kroku 1, zapisz kopie zapasowe jako „% FROM - nadawca wiadomości e-mail” i masz je na widoku w swoim katalogu.

Edelwater
źródło
Bałam się tego. W każdym razie dzięki!
Brad
1

Wymyśliłem sposób na to dla użytkowników komputerów Mac korzystających z Mac Mail i książki adresowej bez konieczności pobierania dodatkowego oprogramowania. Działa to z Mac Mail 4.6 i Książką adresową 5.0.3. Nie jestem pewien, czy to działa na innych wersjach czy nie. Może to działać podobnie w przypadku innych programów pocztowych IMAP, takich jak Thunderbird, ale nie mogę za to ręczyć.

Oto kroki:

  1. Skonfiguruj konto Gmail w Mac Mail. Upewnij się, że serwer poczty przychodzącej to „imap.gmail.com”. Znajdziesz to na pasku narzędzi> Poczta> Preferencje> Konta.
  2. W Gmailu utwórz etykietę dla wiadomości e-mail, dla których chcesz wyodrębnić adresy e-mail.
  3. W Gmailu oznacz wszystkie e-maile, które chcesz, według etykiety powyżej.
  4. W Gmailu wybierz Ustawienia> Etykiety i odznacz pole nowej utworzonej etykiety z napisem „Pokaż w IMAP”.
  5. Uruchom ponownie Mac Maila, aby nowa etykieta Gmaila została zsynchronizowana.
  6. Otwórz książkę adresową. Jeśli używasz książki adresowej do kontaktów, musisz wykonać kopię zapasową kontaktów, ponieważ musisz usunąć wszystkie kontakty z książki adresowej. Wierzę, że możesz to zrobić za pomocą Plik> Eksportuj> Archiwum książki adresowej. Nie używam książki adresowej do eksportowania wiadomości e-mail Gmaila, więc nie mogę udzielić dobrych rad na ten temat. Usuń kontakty z książki adresowej na własne ryzyko.
  7. W książce adresowej usuń wszystkie kontakty. Powinieneś być w stanie to zrobić, wybierając jeden kontakt, naciskając Command + a i naciskając klawisz usuwania.
  8. W Mac Mail znajdź folder IMAP. Po lewej stronie okna powinna znajdować się kolumna ze wszystkimi skrzynkami pocztowymi. Jeśli nie, przejdź do górnego paska narzędzi, wybierz Widok> Pokaż skrzynki pocztowe lub naciśnij Command + Shift + M. Folder IMAP będzie znajdować się u dołu kolumny poniżej „Przypomnienia”, „RSS”, „Na moim Macu” itp. Powinieneś zobaczyć nazwę swojego konta Gmail, które skonfigurowałeś wcześniej, ze strzałką rozwijaną po lewej stronie.
  9. W Mac Mail kliknij strzałkę menu obok skrzynki pocztowej. Spowoduje to wyświetlenie listy folderów i powinno pokazać etykietę utworzoną w Gmailu jako folder. Wybierz ten folder, klikając go.
  10. W Mac Mail w oknie Wiadomości, które powinny teraz wyświetlać wszystkie wiadomości e-mail dla Ciebie Etykieta Gmaila), wybierz wszystkie wiadomości e-mail z listy. Przejdź do górnego paska narzędzi, wybierz Wiadomości> Dodaj nadawców do książki adresowej lub naciśnij Shift+ Command+ Y. Wszyscy nadawcy etykiety Gmaila powinni teraz znajdować się w książce adresowej.
  11. W Książce adresowej możesz teraz eksportować kontakty jako wizytówki vCard do użycia w dowolnym programie, który ci się podoba, przechodząc do paska narzędzi i wybierając Plik> Eksportuj> Eksportuj wizytówki vCard. Możesz nawet zaimportować z powrotem do Kontaktów Google. Jeśli potrzebujesz pliku CSV, niestety musisz zaimportować karty vCards do innego programu (działa Kontakt Google) i ponownie wyeksportować, ponieważ nie możesz wyeksportować CSV z Mac Mail.

Mam nadzieję że to pomoże! Jest to trochę uciążliwe, ale działa dla mnie i jest dość łatwe po zrobieniu tego kilka razy.

JP5678
źródło
0

MineMyMail pobiera wszystkie wiadomości przez IMAP, a następnie wyodrębnia z nich adresy e-mail.

Możesz wybrać, które foldery ma przeszukiwać, wybierając folder / etykietę „Wysłane wiadomości”.

Jason Vallery
źródło
Czy MineMyMail jest godny zaufania? Poszedłem na ich stronę i Chrome ostrzegł mnie, że certyfikat wygasł. Brak odpowiedniego certyfikatu HTTPS i proszenie użytkowników o podanie nazwy użytkownika i hasła Gmaila jest zdecydowanie przerażające. Prowadzi mnie to do podejrzeń, że witryna może wyodrębnić wiadomości e-mail i wykorzystać je do własnego spamowania lub sprzedaży innym spamerom.
Moiz Tankiwala
0

Eksporter adresów IMAP to aplikacja na komputery Mac, która łączy się z dowolnym kontem e-mail IMAP i wyodrębnia każdy adres nadawcy, również z wcześniej ustawionych folderów / etykiet. Z całą uczciwością muszę podkreślić, że opracowuje ją moja firma.

flip79
źródło