Apps Script – فهرست تمام خبرنامه هایی که جیمیل شما را پر می کنند. لغو اشتراک انتخابی آسان شد

آیا در بسیاری از خبرنامه هایی که جیمیل شما را پر می کنند مشترک شده اید؟ با فیلتر کردن جیمیل می توانید همه خبرنامه ها را پاک کنید unsubscribe
متن شاید قبلاً این را می دانستید. و من برای توصیف آن رویه نمی نویسم. شما به اندازه کافی باهوش هستید که با کمی گوگل این کار را انجام دهید.
مشکل
می نویسم تا در مورد یک مورد خاص که برای من اتفاق افتاده است بگویم. من در بسیاری از خبرنامه ها مشترک شدم که احساس می کردم جالب بودم. من تقریباً روزانه خبرنامه می خواندم. با این حال، کم کم با افزایش تعداد مشترک خبرنامه ها غرق شدم.
بنابراین، تصمیم گرفتم خبرنامه مشترک خود را فیلتر کنم. من نمی خواستم خبرنامه های قدیمی را حذف کنم. من فقط می خواستم خبرنامه های مشترک فعلی خود را (که منحصر به فرد هستند) لیست کنم. کمی آنها را بررسی کنید و اشتراک را لغو کنید که غیرضروری به نظر می رسد.
راه حل
به نظر می رسد، هیچ راه آسانی برای انجام آن وجود ندارد Gmail
. بنابراین، مجبور شدم یک کد کوچک انجام دهم. گوگل سرویسی به نام Apps Script دارد. این به شما امکان می دهد مقداری کد را اجرا کنید. می توانید داده ها را از محصولات Google مورد استفاده خود واکشی و دستکاری کنید. بنابراین، می توانید بسیاری از کارهای دستی خسته کننده را خودکار کنید. باور کنید یا نه، من در حدود 100 خبرنامه از وب سایت ها، خدمات و خبرنامه های فنی مختلف اشتراک داشتم. من خبرنامه های مشترک خود را فقط به آنهایی که مناسب به نظر می رسید کاهش دادم.
بنابراین، در اینجا خلاصه آموزشی کاری که من انجام دادم آمده است:
- یک Google Sheet جدید ایجاد کنید
- رفتن به
Extensions > Apps Script
صفحه Google جدید من - کد لازم را در ویرایشگر کد Apps Script بنویسید که این کار را انجام می دهد:
- فرستندگان لیست ایمیل منحصر به فرد را با سایر اطلاعات ضروری مانند نام دریافت کنید
- این داده ها را در یک برگه Google موجود نوشت
- اسکریپت را ذخیره کنید و نامی برای آن بگذارید
- رفتن به
Run > main
، سپس مجوزها را اعطا کنید - آدرسهای ایمیل منحصربهفرد صفحهگسترده شما را پر میکنند
- پس از آن، از Gmail می توانید اشتراک فرستنده های ناخواسته را لغو کنید
کد من دارای قسمت های زیر بود:
- الف
main
تابعی که فراخوانی می کند_getUniqueMailingListSenders
تابع - را
_getUniqueMailingListSenders
پارامترهای زیر را می گیرد:- فیلتر قابل اجرا که برای فیلتر کردن جیمیل اعمال خواهد شد
- عنوان ستون صفحه Google
- یک پارامتر بولی
clearSheet
، که اعلام می کند می خواهم برگه موجود خود را پاک کنم یا نه
- داخل
_getUniqueMailingListSenders
عملکرد، تمام ایمیل های من را فیلتر می کندGmail
- بعداً از طریق ایمیل های فیلتر شده حلقه می زند و آن را اضافه می کند
From
ایمیل به ajavascript set
- را
from
فیلد موجود در فیلتر جیمیل نام فرستنده ایمیل را نیز حفظ می کند - بنابراین، یک حلقه اجرا می شود
javascript set
و عبارت منظم برای جدا کردن نام و ایمیل و ذخیره در نقشه اعمال می شود - این را میتوان در یک حلقه قبلی نیز انجام داد، اما من برای سادگی آن را در یک حلقه جداگانه نگه داشتم.
- نتیجه را می توان از طریق بررسی کرد
Execution log
با استفاده ازconsole.log() of javascript
- با این حال، افزودن آن نتیجه در برگه گوگل راحت تر است
- بنابراین، برگه فعال واکشی می شود (از کجا
Extensions > Apps Script
فراخوانی شد) و پاک شد (بسته بهclearSheet
پارامتر بولی) - سپس، آخرین ستون استفاده شده را پیدا می کند و ستون ها را برای ایمیل ها و نام ها به صورت پویا بعد از آخرین ستون استفاده شده تنظیم می کند.
- عنوان ستون برگه Google را تنظیم می کند (با اطلاعات تاریخ فعلی برای بررسی بعد)
- و هر آدرس ایمیل منحصر به فرد و نام مربوطه را در ستون های جدید می نویسد
کد کامل:
function _getUniqueMailingListSenders(
searchOption,
title,
clearSheet = true,
) {
// Search in Gmail to check all threads
const threads = GmailApp.search(searchOption);
// Use a Set to store unique senders
const senders = new Set();
// Loop through each thread
threads.forEach(thread => {
const messages = thread.getMessages();
// Loop through each message in the thread
messages.forEach(message => {
senders.add(message.getFrom());
});
});
const emailData = new Map();
// Find email and sender name and save it in a map
senders.forEach((sender) => {
const emailMatch = sender.match(/<([^>]+)>/);
const email = emailMatch ? emailMatch[1] : sender;
const name = sender.replace(`<${email}>`, '').trim();
if (!emailData.has(email)) {
emailData.set(email, name);
}
});
// Get the active sheet
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (clearSheet) {
sheet.clear();
}
// Find the last used column
const lastColumn = sheet.getLastColumn();
// Set the columns for emails and names dynamically after the last used column
const emailColumn = lastColumn + 1;
const nameColumn = lastColumn + 2;
const currentDate = new Date().toLocaleDateString();
// Add headers with the current date in the new columns
sheet.getRange(1, emailColumn).setValue(`${title} - Email - ${currentDate}`);
sheet.getRange(1, nameColumn).setValue(`${title} - Name - ${currentDate}`);
// Start writing below the header
let row = 2;
// Write each unique email address and corresponding name to the new columns
emailData.forEach((name, email) => {
console.log(`Adding data on column (${emailColumn}, ${nameColumn}) and row ${row}: `, {email, name});
sheet.getRange(row, emailColumn).setValue(email);
sheet.getRange(row, nameColumn).setValue(name);
row++;
});
}
function main() {
// Search for emails that belong to a mailing list
_getUniqueMailingListSenders(
'list:(<*>)',
'Unique Email Sender',
false,
);
// Search for emails that belong to a substack mailing list
// _getUniqueMailingListSenders(
// // 'list:(<*techworldwithmilan@substack.com>)',
// 'list:(<*.substack.com>)',
// 'Unique Substack Email Sender',
// false,
// );
}
پایان
همین!
امیدوارم مقاله برای شما مفید بوده باشد. شما باید سعی کنید استفاده کنید Apps Script
اگر قبلا این کار را نکرده اید موارد استفاده جالب زیادی دارد. در صورت تمایل نظرات و تجربیات خود را به اشتراک بگذارید.
بیشتر بررسی کنید