Как я могу экспортировать список, содержащий адреса электронной почты для всех, кто прислал мне электронное письмо? У меня есть все сообщения в архиве.
Как я могу экспортировать список, содержащий адреса электронной почты для всех, кто прислал мне электронное письмо? У меня есть все сообщения в архиве.
Ответы:
Я весьма удивлен всеми сложными ответами, подразумевающими некоторые дополнительные инструменты! Каждое полученное вами электронное письмо имеет свой адрес, добавленный в «Все контакты» (в отличие от «Мои контакты») в разделе «Контакты» Gmail. Экспортируйте это, и все готово (или я что-то пропустил в вашем вопросе).
Вот тут-то и проявляется мощь скрипта Google Apps. Если вы вставите следующий скрипт в новую таблицу 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, и, похоже, оно обновило интерфейс приложения и заставило его работать с несколькими учетными записями (обнаружил, что только что вошел в мое приложение), изменив ссылку ниже, чтобы отразить это.
Оригинальный ответ
Если вам нужно быстрое настольное приложение (не скрипт), подумайте об этом.
Я довольно долго искал приложение, которое работает на уровне меток, и нашел Gmail Email Exporter от deep-email-extractor .
Это платное приложение (я не имею к ним никакого отношения), но оно дешевое, и вы можете экспортировать адреса электронной почты из определенных ярлыков или из всей учетной записи Gmail.
Таким образом, в вашем случае поместите всю полученную электронную почту в ярлык с помощью фильтра и используйте описанное выше для экспорта в файл CSV.
Основано на ответе @ jacob-jan-tuinstra. Сделал некоторые незначительные изменения, чтобы удовлетворить мои потребности, возможно, другие сочтут это полезным.
Использует поиск, не разбивается на ярлыки, а также разбивает большие входящие сообщения.
Часть, которая гласит «ВАШ ПОИСК GMAIL ПОСЛЕДУЕТ ЗДЕСЬ», может быть заполнена любым запросом, который вы будете использовать в своей папке входящих
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. Проверьте вашу оригинальную таблицу, и она будет иметь электронные письма.
;
или ,
.Единственный способ сделать это
Примечание. Если вы используете imapsize (бесплатно) для шага 1, сохраните резервные копии как «% FROM - отправитель электронного письма», и они будут видны в вашем каталоге.
Я нашел способ сделать это для пользователей Mac, использующих Mac Mail и адресную книгу, без необходимости загружать дополнительное программное обеспечение. Это работает с Mac Mail 4.6 и Адресной книгой 5.0.3. Не уверен, работает ли он для других вер или нет. Это может работать аналогично для других программ электронной почты IMAP, таких как Thunderbird, но я не могу ручаться за это.
Вот шаги:
Надеюсь это поможет! Это немного громоздко, но работает для меня и довольно легко после того, как вы сделаете это пару раз.
MineMyMail получает все ваши сообщения через IMAP, а затем извлекает адреса электронной почты из него.
Вы можете выбрать, какие папки он ищет, выбрав папку / ярлык «Отправленная почта».
IMAP Addresses Exporter - это приложение для Mac, которое подключается к любой учетной записи электронной почты IMAP и извлекает адрес каждого отправителя, в том числе из папок / ярлыков, которые вы указали ранее. Справедливости ради, должен подчеркнуть, что он разработан моей компанией.