電子メールを送信したすべての人の電子メールアドレスを含むリストをエクスポートするにはどうすればよいですか?すべてのメッセージをアーカイブしました。
いくつかの追加ツールを暗示している複雑な答えに驚かされます!受信したすべてのメールのアドレスは、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に変更し、アプリのUIを改良し、複数のアカウントで動作するようになったようです(アプリにログインしたばかりであることがわかりました)。これを反映するために以下のリンクを変更しました。
元の回答
スクリプトではなく高速のデスクトップアプリが必要な場合は、これを検討してください。
ラベルレベルで動作するアプリをかなり検索しましたが、Gmail Email Exporterが deep-email-extractor から見つかりました。
それは有料アプリです(私は彼らとは何の関係もありません)が、安価で、特定のラベルまたはすべてのGmailアカウントからメールアドレスをエクスポートできます。
したがって、あなたのケースでは、フィルターを使用して受信したすべての電子メールをラベルに入れ、上記を使用してCSVファイルにエクスポートします。
次のアプリは無料で、美しく機能します!
http://www.labnol.org/internet/extract-gmail-addresses/28037/
@ 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);
}
次のステップごとに試してみてください 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アプリです。すべての公平を期して、私はそれが私の会社によって開発されたことを強調しなければなりません。