Obter endereços de email das mensagens recebidas do Gmail

33

Como posso exportar uma lista contendo endereços de email para todos que me enviaram um email? Eu tenho todas as mensagens arquivadas.

Brad
fonte
deep-email-extractor.com é seu amigo. Pago, mas seguro, seguro e usa senhas em duas etapas. Comprei-o há alguns anos e ainda usá-lo, bastante útil
Tino Mclaren
Ainda não posso postar uma resposta (sem repetição suficiente), mas a resposta de Jerry Neumann aqui em Python funciona maravilhosamente!
Basj 21/07

Respostas:

13

Estou bastante surpreso com todas as respostas complicadas que implicam em algumas ferramentas extras! Todos os emails que você recebe têm seu endereço adicionado a "Todos os contatos" (em oposição a "Meus contatos") na parte Contatos do Gmail. Exporte esse e pronto (ou eu perdi algo na sua pergunta).

Patrick Honorez
fonte
Isso funcionaria muito bem, supondo que a pessoa ainda tenha acesso à conta do Gmail, em vez de um simples arquivo morto das mensagens. Boa solução!
31414 Brad
Sim, concordou, mas há uma ressalva em usar contatos em vez de extrair ferramentas; você pode ter mexido com seus contatos, muitos de nós fazemos quando arrumamos as coisas, como o OP sugere, pois as mensagens são arquivadas. Neste ponto, você não tem certeza se possui 'todos' os seus endereços de email? Eu estava nessa situação e, tendo analisado todas as respostas aqui, a starbanana era simplesmente a mais elegante e confiável (ela usa senhas específicas para autenticação e aplicativo de duas etapas) e uma conexão direta do meu PC ao gmail, para que nenhum homem no meio estivesse ouvindo .
Tino Mclaren
2
Isso só é verdade se você tiver essa configuração ativada. Embora seja o padrão, você pode desativá-lo facilmente. Veja: Pare o Gmail de criar contatos automaticamente
ale
28

É aqui que entra o poder do script do Google Apps. Se você colar o seguinte script em uma nova planilha do Google (Ferramentas, editor de scripts, pressione o ícone do bug para autenticar o script), novas folhas serão criadas automaticamente com base no número de etiquetas presentes. Depois disso, os endereços de email serão adicionados.

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

Use a SPLITfunção para extrair nomes para encontrar duplicatas. As pastas do sistema são ignoradas, como INBOXou All Items.

Nota: o script pode levar algum tempo para ser executado, o que depende, é claro, do número de e-mails

Jacob Jan Tuinstra
fonte
@ MG1 verificou o script e ele falha nos rótulos vazios. Código revisado para que uma mensagem apareça, mencionando os rótulos vazios.
Jacob Jan Tuinstra
7

Atualização 2017

O Starbanana mudou seu nome para deep-email-extractor e também parece que renovou a interface do aplicativo e o fez funcionar em várias contas (descobertas depois de fazer login no meu aplicativo), alterou o link abaixo para refletir isso.

Resposta original

Se você precisar de um aplicativo de desktop rápido (não um script), considere isso.

Pesquisei bastante um aplicativo que funcionava no nível da etiqueta e encontrei o Gmail Email Exporter no deep-email-extractor .

É um aplicativo pago (não tenho nada a ver com eles), mas é barato e você pode exportar endereços de e-mail de marcadores específicos ou de toda a sua conta do Gmail.

Portanto, no seu caso, coloque todos os seus emails recebidos em um rótulo usando um filtro e use o acima para exportar para um arquivo CSV.

LenPopLilly
fonte
1
Uma alternativa mais barata para usuários de Mac é o Email Contacts Extractor ( itunes.apple.com/us/app/email-contacts-extractor/… ). Divulgação completa: eu mesmo a desenvolvi porque sentia que outras ofertas eram muito caras ou exigiam acesso on-line ao meu e-mail.
Hpique
Seria incrível se você pudesse fazer uma versão para 20 endereços ou menos, como eles fazem.
Dan Rosenstark 17/09/2013
O starbanana.com agora extrai e-mails do corpo também, eu apenas tentei e o multi-threading também (faz 15 rótulos ao mesmo tempo) incrivelmente rápido e bem impressionado.
Tino Mclaren
6

Com base na resposta de @ jacob-jan-tuinstra. Fiz algumas pequenas modificações para atender às minhas necessidades, talvez outros achem útil.

Usa a pesquisa, não é dividida por marcadores e também agrupa para caixas de entrada grandes.

A parte que diz 'SUA CONSULTA DE PESQUISA GMAIL VAI AQUI' pode ser preenchida com qualquer consulta que você usaria em sua caixa de entrada.

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
fonte
seu scrpit funciona perfeitamente para mim, obrigado! você pode adicionar a opção de recuperar endereços de email do corpo do email também, muito apreciado. obrigado.
5

O aplicativo a seguir é gratuito e funciona lindamente!

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

MidGe
fonte
Outra grande utilidade. Mas ainda estou para tentar.
Moiz Tankiwala
1
Eu nunca confiaria em qualquer aplicativo on-line, tantos golpes por aí, unindo p / un e todos os seus endereços de e-mail. Vá com Aplicativo instalado - conexão HTTPS.
Tino Mclaren
Concordo que você precisa ser cauteloso, mas o cara por trás do Labnol é um cara legal que publicou uma tonelada de coisas realmente úteis. Se você não confia, mas é um pouco técnico, sempre pode pegar o código src ao qual ele se vincula nesse artigo e criar o
RedYeti
5

Confuso / Não técnico / Sem idéia do que fazer?

Tente o seguinte passo a passo e obrigado a https://webapps.stackexchange.com/a/47930/6329

etapa 1. drive.google.com

etapa 2. nova planilha

etapa 3. ferramentas> editor de scripts

passo 4. feche a introdução pop-up com o botão fechar

passo 5. cole o código

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

passo 6. posicione o cursor na palavra "getEmails" na primeira linha

passo 7. clique no botão reproduzir triângulo acima na barra de menus

passo 8. Solicita que você se autentique, faça isso

etapa 9. clique no botão play novamente se ainda não foi executado

etapa 10. verifique sua planilha original e ela receberá os emails.

Jason
fonte
4
  1. Navegue para a lista. Escolha a opção suspensa da caixa de seleção e selecione tudo.
  2. [No topo, você terá uma opção de hiperlink para escolher todas as conversas na sua lista. Clique nele.] Atualização: Esta etapa não funciona, ela permite apenas 25 por vez, que chatice!
  3. Em seguida, vá para o menu suspenso Mais e escolha as mensagens de filtro como estas.
  4. Na caixa de diálogo do filtro, a caixa de texto De será destacada. Estes são todos os endereços de origem.
  5. Copie-o.
  6. Cole-o em um editor de HTML como o Notepad ++ ou o Visual Studio.
  7. Agora você só precisa fazer uma pesquisa e substituir a palavra OU, substituir por ;ou ,.
  8. Recopie a lista e cole na sua mensagem.
Jason
fonte
Melhor apenas dar a resposta. Não há necessidade da história por trás disso. :-)
Yosi Mor
4

A única maneira de fazer isso é

  1. Exportar tudo como .txt (consulte: Exportar mensagens do Gmail para arquivos de texto ou HTML )
  2. Percorra tudo isso e grep "De:" linhas em um banco de dados separado.

Nota: se você usar o imapsize (gratuito) na etapa 1, salve os backups como "% FROM - O remetente do email" e você os terá à vista no diretório.

Edelwater
fonte
Eu estava com medo daquilo. Obrigado embora!
Brad
1

Eu descobri uma maneira de fazer isso para usuários de Mac usando o Mac Mail e o catálogo de endereços sem precisar baixar software extra. Isso funciona com o Mac Mail 4.6 e o ​​Address Book 5.0.3. Não tenho certeza se funciona para outro vers ou não. Isso pode funcionar de maneira semelhante para outros programas de email IMAP como o Thunderbird, mas não posso garantir isso.

Aqui estão os passos:

  1. Configure sua conta do Gmail no Mac Mail. Verifique se o servidor de e-mail recebido é "imap.gmail.com". Você pode encontrá-lo na barra de ferramentas> Correio> Preferências> Contas.
  2. No Gmail, crie um Rótulo para os emails para os quais deseja extrair endereços de email.
  3. No Gmail, identifique todos os e-mails desejados de acordo com o Marcador acima.
  4. No Gmail, vá para Configurações> Marcadores e marque a caixa do novo rótulo que você criou que diz "Mostrar no IMAP".
  5. Reinicie o Mac Mail para que o novo rótulo do Gmail seja sincronizado.
  6. Abra o Catálogo de Endereços. Se você usar o Catálogo de endereços para seus contatos, precisará fazer backup dos contatos, pois precisará excluir todos os contatos no Catálogo de endereços. Acredito que você pode fazer isso com Arquivo> Exportar> Arquivo do catálogo de endereços. Não uso o Catálogo de endereços para exportar e-mails do Gmail, por isso não posso dar bons conselhos sobre isso. Exclua os contatos do Catálogo de endereços por sua conta e risco.
  7. No Catálogo de endereços, exclua todos os seus contatos. Você deve conseguir fazer isso selecionando um contato, pressionando Command + a e pressionando a tecla Delete.
  8. No Mac Mail, localize sua pasta IMAP. Deve haver uma coluna no lado esquerdo da janela com todas as suas caixas de correio. Caso contrário, vá para a barra de ferramentas superior, selecione Exibir> Mostrar caixas de correio ou pressione Command + Shift + M. A pasta IMAP estará na parte inferior da coluna abaixo de "Lembretes", "RSS", "No meu Mac" etc. Você deverá ver o Nome da sua conta do Gmail que configurou anteriormente com uma seta suspensa à esquerda.
  9. No Mac Mail, clique na seta suspensa ao lado da sua caixa de correio. Isso mostrará uma lista de pastas e deve mostrar o Rótulo que você criou no Gmail como uma pasta. Selecione esta pasta clicando nela.
  10. No Mac Mail, na janela Mensagens, que agora deve exibir todos os seus e-mails para o seu Gmail Label), selecione todos os e-mails da lista. Vá para a barra de ferramentas superior, selecione Mensagens> Adicionar remetentes ao catálogo de endereços ou pressione Shift+ Command+ Y. Todos os remetentes para sua etiqueta do Gmail agora devem estar no Catálogo de endereços.
  11. Agora, no Catálogo de endereços, você pode exportar contatos como vCards para usar em qualquer programa que desejar, acessando a barra de ferramentas e selecionando Arquivo> Exportar> Exportar vCards. Você pode até importar de volta para os Contatos do Google. Se você precisar de um arquivo CSV, infelizmente precisará importar os vCards para outro programa (o Google Contacts funciona) e reexportar porque não pode exportar CSV do Mac Mail.

Espero que isto ajude! É um pouco complicado, mas funciona para mim e é bastante fácil depois que você faz isso algumas vezes.

JP5678
fonte
0

O MineMyMail busca todas as suas mensagens via IMAP e extrai os endereços de email.

Você pode escolher quais pastas ele procura selecionando a pasta / etiqueta "Correio enviado".

Jason Vallery
fonte
O MineMyMail é confiável? Eu fui ao site deles e o Chrome me avisou que o certificado expirou. Não ter um certificado HTTPS adequado e pedir aos usuários para digitar seu nome de usuário e senha do Gmail é definitivamente assustador. Isso me leva a suspeitar que o site possa extrair os e-mails e usá-lo para enviar spam ou vender para outros spammers.
Moiz Tankiwala
0

O Exportador de endereços IMAP é um aplicativo para Mac que se conecta a qualquer conta de e-mail IMAP e extrai todos os endereços de remetentes, também das pastas / etiquetas que você definiu anteriormente. Com toda a justiça, devo destacar que é desenvolvido pela minha empresa.

flip79
fonte