電子メールを送信したすべての人の電子メールアドレスを含むリストをエクスポートするにはどうすればよいですか?すべてのメッセージをアーカイブしました。
電子メールを送信したすべての人の電子メールアドレスを含むリストをエクスポートするにはどうすればよいですか?すべてのメッセージをアーカイブしました。
回答:
いくつかの余分なツールを暗示している複雑な答えに驚く。受信したすべてのメールのアドレスは、Gmailの[連絡先]部分の[すべての連絡先]([私の連絡先]ではなく)に追加されます。それをエクスポートすれば完了です(または、質問で何か見落としていました)。
これが、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
。
注:スクリプトの実行には時間がかかる場合がありますが、これはもちろん電子メールの数に依存します
更新2017
Starbananaは名前をdeep-email-extractorに変更し、App UIを刷新し、複数のアカウントで動作するようになりました(アプリにログインしたばかりであることがわかりました)。これを反映するために以下のリンクを変更しました。
元の回答
スクリプトではなく高速のデスクトップアプリが必要な場合は、これを検討してください。
ラベルレベルで動作するアプリをかなり検索してみたところ、deep-email-extractorの Gmail Email Exporterが見つかりました。
それは有料アプリです(私は彼らとは何の関係もありません)が、安価で、特定のラベルまたはすべてのGmailアカウントからメールアドレスをエクスポートできます。
そのため、フィルターを使用して受信したすべてのメールをラベルに入れ、上記を使用してCSVファイルにエクスポートします。
@ 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);
}
次のアプリは無料で、美しく機能します!
http://www.labnol.org/internet/extract-gmail-addresses/28037/
次のステップごとに試してください。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.元のスプレッドシートを確認すると、メールが届きます。
;
か,
。これを行う唯一の方法は
注:ステップ1でimapsize(無料)を使用する場合、バックアップを「%FROM-電子メールの送信者」として保存し、ディレクトリ内でそれらを簡単に確認できます。
追加のソフトウェアをダウンロードすることなく、Mac Mailとアドレス帳を使用してMacユーザー向けにこれを行う方法を見つけました。これは、Mac Mail 4.6およびアドレス帳5.0.3で動作します。他のバージョンで機能するかどうかはわかりません。これは、Thunderbirdなどの他のIMAPメールプログラムでも同様に機能する可能性がありますが、それを保証することはできません。
手順は次のとおりです。
お役に立てれば!それは少し面倒ですが、私のために動作し、あなたがそれを数回やった後はかなり簡単です。
MineMyMailは、IMAPを介してすべてのメッセージを取得し、それから電子メールアドレスを抽出します。
[送信済みメール]フォルダー/ラベルを選択することで、検索するフォルダーを選択できます。
IMAP Addresses Exporterは、任意のIMAPメールアカウントに接続し、以前に設定したフォルダー/ラベルからすべての送信者アドレスを抽出するMacアプリです。公平を期すために、私はそれが私の会社によって開発されたことを強調しなければなりません。