web-dev-qa-db-ja.com

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

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

33
Brad

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

13
Patrick Honorez

これが、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関数を使用して名前を抽出し、重複を見つけます。 INBOXAll Itemsなどのシステムフォルダーは無視されます。

注:スクリプトの実行には時間がかかる場合がありますが、これはもちろん、電子メールの数に依存します

28

2017年に更新

Starbananaは名前をdeep-email-extractorに変更し、アプリのUIを改良し、複数のアカウントで動作するようになったようです(アプリにログインしたばかりであることがわかりました)。これを反映するために以下のリンクを変更しました。

元の回答

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

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

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

したがって、あなたのケースでは、フィルターを使用して受信したすべての電子メールをラベルに入れ、上記を使用してCSVファイルにエクスポートします。

7
LenPopLilly

次のアプリは無料で、美しく機能します!

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

5
MidGe

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

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

'YOUR GMAIL 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);
}
5
varblob

混乱/非技術的/アイデアなし

次のステップごとに試してみてください 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.元のスプレッドシートを確認すると、メールが届きます。

5
Jason

これを行う唯一の方法は

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

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

4
edelwater
  1. リストに移動します。チェックボックスオプションのドロップダウンを選択し、すべてを選択します。
  2. [上部には、リスト内のすべての会話を選択するためのハイパーリンクオプションが表示されます。クリックしてください。]更新:この手順は機能しません。一度に25しか実行できません。
  3. 次に、[その他]プルダウンで、次のようなフィルタメッセージを選択します。
  4. フィルターダイアログで、[From]テキストボックスが強調表示されます。これらはすべてfromアドレスです。
  5. コピーしてください。
  6. Notepad ++やVisual StudioなどのHTMLエディターに貼り付けます。
  7. ここで、検索を実行してWordを置き換えるか、または;または,に置き換えるだけです。
  8. リストを再コピーして、メッセージに貼り付けます。
4
Jason

追加のソフトウェアをダウンロードすることなく、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」、「On My Mac」などの下の列の下部にあります。左側にあるドロップダウン矢印で、前に設定したGmailアカウントの名前が表示されます。
  9. Mac Mailで、メールボックスの横にあるドロップダウン矢印をクリックします。これにより、フォルダーのリストが表示され、Gmailでフォルダーとして作成したラベルが表示されます。このフォルダをクリックして選択します。
  10. Macメールの[メッセージ]ウィンドウ(Gmailラベルのすべてのメールが表示されるはずです)で、リスト内のすべてのメールを選択します。上部のツールバーに移動し、[メッセージ]> [送信者をアドレス帳に追加]を選択するか、 Shift+Command+Y。これで、Gmailラベルのすべての送信者がアドレス帳に登録されているはずです。
  11. アドレス帳では、ツールバーに移動して[ファイル]、[エクスポート]、[vCardのエクスポート]の順に選択することで、連絡先をvCardとしてエクスポートして、好きなプログラムで使用できます。 Googleコンタクトにインポートして戻すこともできます。 CSVファイルが必要な場合は、残念ながら、Mac MailからCSVをエクスポートできないため、vCardを別のプログラムにインポートし(Google Contactsが機能します)、再エクスポートする必要があります。

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

1
JP5678

MineMyMail IMAP経由ですべてのメッセージを取得し、そこからメールアドレスを抽出します。

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

0
Jason Vallery

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

0
flip79