برنامه نویسی

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

google-app-script


آیا در بسیاری از خبرنامه هایی که جیمیل شما را پر می کنند مشترک شده اید؟ با فیلتر کردن جیمیل می توانید همه خبرنامه ها را پاک کنید unsubscribe متن شاید قبلاً این را می دانستید. و من برای توصیف آن رویه نمی نویسم. شما به اندازه کافی باهوش هستید که با کمی گوگل این کار را انجام دهید.

مشکل

می نویسم تا در مورد یک مورد خاص که برای من اتفاق افتاده است بگویم. من در بسیاری از خبرنامه ها مشترک شدم که احساس می کردم جالب بودم. من تقریباً روزانه خبرنامه می خواندم. با این حال، کم کم با افزایش تعداد مشترک خبرنامه ها غرق شدم.

بنابراین، تصمیم گرفتم خبرنامه مشترک خود را فیلتر کنم. من نمی خواستم خبرنامه های قدیمی را حذف کنم. من فقط می خواستم خبرنامه های مشترک فعلی خود را (که منحصر به فرد هستند) لیست کنم. کمی آنها را بررسی کنید و اشتراک را لغو کنید که غیرضروری به نظر می رسد.

راه حل

به نظر می رسد، هیچ راه آسانی برای انجام آن وجود ندارد Gmail. بنابراین، مجبور شدم یک کد کوچک انجام دهم. گوگل سرویسی به نام Apps Script دارد. این به شما امکان می دهد مقداری کد را اجرا کنید. می توانید داده ها را از محصولات Google مورد استفاده خود واکشی و دستکاری کنید. بنابراین، می توانید بسیاری از کارهای دستی خسته کننده را خودکار کنید. باور کنید یا نه، من در حدود 100 خبرنامه از وب سایت ها، خدمات و خبرنامه های فنی مختلف اشتراک داشتم. من خبرنامه های مشترک خود را فقط به آنهایی که مناسب به نظر می رسید کاهش دادم.

بنابراین، در اینجا خلاصه آموزشی کاری که من انجام دادم آمده است:

  1. یک Google Sheet جدید ایجاد کنید
  2. رفتن به Extensions > Apps Script صفحه Google جدید من
  3. کد لازم را در ویرایشگر کد Apps Script بنویسید که این کار را انجام می دهد:
    • فرستندگان لیست ایمیل منحصر به فرد را با سایر اطلاعات ضروری مانند نام دریافت کنید
    • این داده ها را در یک برگه Google موجود نوشت
  4. اسکریپت را ذخیره کنید و نامی برای آن بگذارید
  5. رفتن به Run > main، سپس مجوزها را اعطا کنید
  6. آدرس‌های ایمیل منحصربه‌فرد صفحه‌گسترده شما را پر می‌کنند
  7. پس از آن، از Gmail می توانید اشتراک فرستنده های ناخواسته را لغو کنید

کد من دارای قسمت های زیر بود:

  1. الف main تابعی که فراخوانی می کند _getUniqueMailingListSenders تابع
  2. را _getUniqueMailingListSenders پارامترهای زیر را می گیرد:
    • فیلتر قابل اجرا که برای فیلتر کردن جیمیل اعمال خواهد شد
    • عنوان ستون صفحه Google
    • یک پارامتر بولی clearSheet، که اعلام می کند می خواهم برگه موجود خود را پاک کنم یا نه
  3. داخل _getUniqueMailingListSenders عملکرد، تمام ایمیل های من را فیلتر می کند Gmail
  4. بعداً از طریق ایمیل های فیلتر شده حلقه می زند و آن را اضافه می کند From ایمیل به a javascript set
  5. را from فیلد موجود در فیلتر جیمیل نام فرستنده ایمیل را نیز حفظ می کند
  6. بنابراین، یک حلقه اجرا می شود javascript setو عبارت منظم برای جدا کردن نام و ایمیل و ذخیره در نقشه اعمال می شود
  7. این را می‌توان در یک حلقه قبلی نیز انجام داد، اما من برای سادگی آن را در یک حلقه جداگانه نگه داشتم.
  8. نتیجه را می توان از طریق بررسی کرد Execution log با استفاده از console.log() of javascript
  9. با این حال، افزودن آن نتیجه در برگه گوگل راحت تر است
  10. بنابراین، برگه فعال واکشی می شود (از کجا Extensions > Apps Script فراخوانی شد) و پاک شد (بسته به clearSheet پارامتر بولی)
  11. سپس، آخرین ستون استفاده شده را پیدا می کند و ستون ها را برای ایمیل ها و نام ها به صورت پویا بعد از آخرین ستون استفاده شده تنظیم می کند.
  12. عنوان ستون برگه Google را تنظیم می کند (با اطلاعات تاریخ فعلی برای بررسی بعد)
  13. و هر آدرس ایمیل منحصر به فرد و نام مربوطه را در ستون های جدید می نویسد

کد کامل:

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 اگر قبلا این کار را نکرده اید موارد استفاده جالب زیادی دارد. در صورت تمایل نظرات و تجربیات خود را به اشتراک بگذارید.

بیشتر بررسی کنید


نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا