受信したGmailメッセージから電子メールアドレスを取得する


33

電子メールを送信したすべての人の電子メールアドレスを含むリストをエクスポートするにはどうすればよいですか?すべてのメッセージをアーカイブしました。


deep-email-extractor.comはあなたの友達です。支払われますが、安全、安全で、2段階のパスワードを使用します。私は数年前にそれを購入し、まだそれを使用して、非常に便利です
ティノマクラーレン

まだ回答を投稿することはできません(十分な担当者ではありません)が、このPython のJerry Neumannの回答は素晴らしく機能します!
-Basj

回答:


13

いくつかの余分なツールを暗示している複雑な答えに驚く。受信したすべてのメールのアドレスは、Gmailの[連絡先]部分の[すべての連絡先]([私の連絡先]ではなく)に追加されます。それをエクスポートすれば完了です(または、質問で何か見落としていました)。


その人がメッセージの単純なアーカイブではなく、Gmailアカウントにまだアクセスできると仮定すると、それはうまくいきます。良い解決策!
ブラッド14

はい、同意しましたが、抽出ツールよりも連絡先を使用する場合、警告が1つあります。連絡先を台無しにした可能性があります。この時点で、「すべて」のメールアドレスを持っているかどうかはわかりませんか?私はこの状況にあり、ここですべての答えを見ましたが、スターバナナは非常にシンプルで最もエレガントで信頼性が高く(2段階認証とアプリ固有のパスワードを使用します)、私のPCからGmailへの直接接続なので、誰も聞いていません。
ティノマクラーレン

2
これは、その設定をオンにしている場合にのみ当てはまります。デフォルトですが、簡単にオフにすることができます。参照:ストップGmailの連絡先に自動的に作成するから
エール

28

これが、Google Apps Scriptの威力を発揮する場所です。次のスクリプトを新しい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に変更し、App UIを刷新し、複数のアカウントで動作するようになりました(アプリにログインしたばかりであることがわかりました)。これを反映するために以下のリンクを変更しました。

元の回答

スクリプトではなく高速のデスクトップアプリが必要な場合は、これを検討してください。

ラベルレベルで動作するアプリをかなり検索してみたところ、deep-email-extractorの Gmail Email Exporterが見つかりました。

それは有料アプリです(私は彼らとは何の関係もありません)が、安価で、特定のラベルまたはすべてのGmailアカウントからメールアドレスをエクスポートできます。

そのため、フィルターを使用して受信したすべてのメールをラベルに入れ、上記を使用してCSVファイルにエクスポートします。


1
Macユーザー向けのより安価な代替手段は、Email Contacts Extractor(itunes.apple.com/us/app/email-contacts-extractor/…)です。完全開示:他の製品が高すぎるか、電子メールへのオンラインアクセスが必要だと感じたため、自分で開発しました。
hpique

20個以下のアドレス用のバージョンを作成できるとしたら、それは素晴らしいことです。
ダンローゼンスターク

starbanana.comは今やメールを本文から抽出します。私はそれを試しましたが、マルチスレッドも(同時に15のラベルを実行します)信じられないほど高速で感銘を受けました。
ティノマクラーレン

6

@ jacob-jan-tuinstraの回答に基づいています。私のニーズに合うようにいくつかの小さな変更を加えたので、おそらく他の人がそれを役に立つと思うでしょう。

検索を使用し、ラベルで分割せず、大きな受信トレイのチャンク化も行います。

「GOUR SEARCH QUERY GOES HERE」と表示されている部分には、受信トレイで使用するクエリを入力できます。

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/


別の素晴らしいユーティリティ。しかし、私はまだ試していない。
モイズタンキワラ14

1
私は決して「オンラインアプリ」を信用しないので、そこに多くの詐欺がun / pwとあなたのすべてのメールアドレスを盗んでいます。インストール済みアプリ-HTTPS接続で移動します。
ティノマクラーレン

私はあなたが用心深くする必要があることに同意しますが、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. フィルターダイアログで、[From]テキストボックスが強調表示されます。これらはすべてfromアドレスです。
  5. コピーします。
  6. Notepad ++やVisual StudioなどのHTMLエディターに貼り付けます。
  7. 今、あなただけの検索を行うと、単語を置き換えるか、と交換する必要があります;,
  8. リストを再コピーして、メッセージに貼り付けます。

答えを出した方が良い。その背後にある物語は必要ありません。:-)
Yosi Mor

4

これを行う唯一の方法は

  1. すべてを.txtとしてエクスポート(GmailメッセージをテキストまたはHTMLファイルにエクスポートを参照)
  2. それをすべてループし、別のデータベースの「From:」行をgrepします。

注:ステップ1でimapsize(無料)を使用する場合、バックアップを「%FROM-電子メールの送信者」として保存し、ディレクトリ内でそれらを簡単に確認できます。


それが怖かった。でもありがとう!
ブラッド

1

追加のソフトウェアをダウンロードすることなく、Mac Mailとアドレス帳を使用してMacユーザー向けにこれを行う方法を見つけました。これは、Mac Mail 4.6およびアドレス帳5.0.3で動作します。他のバージョンで機能するかどうかはわかりません。これは、Thunderbirdなどの他のIMAPメールプログラムでも同様に機能する可能性がありますが、それを保証することはできません。

手順は次のとおりです。

  1. Mac MailでGmailアカウントをセットアップします。受信メールサーバーが「imap.gmail.com」であることを確認してください。これは、ツールバー>メール>設定>アカウントの下にあります。
  2. Gmailで、メールアドレスを抽出するメールのラベルを作成します。
  3. Gmailで、上記のラベルごとに必要なすべてのメールにラベルを付けます。
  4. Gmailで、[設定]> [ラベル]に移動し、[IMAPで表示]という作成した新しいラベルのボックスをオフにします。
  5. Macメールを再起動して、新しいGmailラベルを同期します。
  6. アドレス帳を開きます。連絡先にアドレス帳を使用する場合、アドレス帳のすべての連絡先を削除する必要があるため、連絡先をバックアップする必要があります。これは、[ファイル]> [エクスポート]> [アドレス帳アーカイブ]で実行できると思います。私は、Gmailメールのエクスポート以外にアドレス帳を使用していないので、これに関する良いアドバイスはできません。自己責任でアドレス帳の連絡先を削除してください。
  7. アドレス帳で、すべての連絡先を削除します。これを行うには、1つの連絡先を選択し、Command + aを押してから削除キーを押します。
  8. Mac Mailで、IMAPフォルダーを見つけます。ウィンドウの左側に、すべてのメールボックスを含む列があるはずです。上部のツールバーに移動しない場合は、表示>メールボックスの表示を選択するか、Command + Shift + Mを押します。IMAPフォルダーは、「リマインダー」、「RSS」、「My Mac」などの下の列の下部にあります。前に設定したGmailアカウントの名前と、左側のドロップダウン矢印が表示されます。
  9. Mac Mailで、メールボックスの横にあるドロップダウン矢印をクリックします。これにより、フォルダーのリストが表示され、Gmailでフォルダーとして作成したラベルが表示されます。このフォルダをクリックして選択します。
  10. Macメールの[メッセージ]ウィンドウ(Gmailラベルのすべてのメールが表示されるはずです)で、リスト内のすべてのメールを選択します。上部のツールバーに移動し、[メッセージ]> [送信者をアドレス帳に追加]を選択するか、Shift+ Command+を押しYます。これで、Gmailラベルのすべての送信者がアドレス帳に登録されているはずです。
  11. アドレス帳では、連絡先をvCardとしてエクスポートして、ツールバーで[ファイル]、[エクスポート]、[vCardをエクスポート]の順に選択して、好きなプログラムで使用できます。Googleコンタクトにインポートして戻すこともできます。CSVファイルが必要な場合は、残念ながら、Mac MailからCSVをエクスポートできないため、vCardを別のプログラムにインポートして(Googleコンタクトが機能する)、再エクスポートする必要があります。

お役に立てれば!それは少し面倒ですが、私のために動作し、あなたがそれを数回やった後はかなり簡単です。


0

MineMyMailは、IMAPを介してすべてのメッセージを取得し、それから電子メールアドレスを抽出します。

[送信済みメール]フォルダー/ラベルを選択することで、検索するフォルダーを選択できます。


MineMyMailは信頼できますか?私は彼らのサイトに行き、Chromeは証明書の有効期限が切れたことを警告しました。適切なHTTPS証明書がなく、Gmailのユーザー名とパスワードの入力をユーザーに要求するのは間違いなく恐ろしいことです。サイトがメールを抽出し、自分のスパムや他のスパマーへの販売に使用しているのではないかと疑っています。
モイズタンキワラ14

0

IMAP Addresses Exporterは、任意のIMAPメールアカウントに接続し、以前に設定したフォルダー/ラベルからすべての送信者アドレスを抽出するMacアプリです。公平を期すために、私はそれが私の会社によって開発されたことを強調しなければなりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.