تقنية

كيفية قراءة رسائل البريد الإلكتروني بكفاءة باستخدام Gmail API وApps Script


تساعدك الوظيفة الإضافية Email Address Extractor لـ Gmail على استخراج عناوين البريد الإلكتروني لعملائك من رسائل Gmail الخاصة بك وكتابتها في ورقة Google. يستخدم واجهة برمجة تطبيقات Gmail داخليًا لجلب الرسائل وواجهة برمجة تطبيقات جداول بيانات Google لكتابة عناوين البريد الإلكتروني في ورقة Google.

هناك طريقتان لسحب عناوين البريد الإلكتروني من رسائل Gmail. الطريقة الأبسط والأكثر شيوعًا هي أن تقوم بسحب قائمة الرسائل التي ترغب في استخراج البريد الإلكتروني منها وتكرارها لاستخراج عناوين البريد الإلكتروني.

// Pull details of emails from PayPal, Stripe or Shopify
function getEmailAddress() {
  const threads = GmailApp.search('from:paypal OR from:stripe OR from:shopify newer_than:2d', 0, 10);
  threads.forEach((thread) => {
    const messages = thread.getMessages();
    messages.forEach((message) => {
      Logger.log('Subject: ' + message.getSubject());
      Logger.log('To: ' + message.getTo());
      Logger.log('From: ' + message.getFrom());
    });
  });
}

طلب دفعة Gmail

هناك طريقة أكثر فعالية لسحب عناوين البريد الإلكتروني من رسائل بريد إلكتروني متعددة وهي تقديم طلب دفعة واحدة إلى Gmail API بمساعدة خدمة UrlFetch الخاصة بـ Apps Script.

1. احصل على قائمة الرسائل في Gmail

نستخدم خدمة Gmail المتقدمة لبرنامج Apps Script للحصول على قائمة بالرسائل غير المقروءة من البريد الوارد للمستخدم في Gmail. يمكنك استخدام أي من عوامل تشغيل البحث المتقدم في Gmail لتصفية الرسائل.

ال searchGmailMessages() تستخدم الوظيفة واجهة برمجة تطبيقات Gmail للبحث عن الرسائل غير المقروءة في البريد الوارد وإرجاع مجموعة من معرفات الرسائل.

const searchGmailMessages = () => {
  const { messages = [] } = Gmail.Users.Messages.list('me', {
    q: 'in:inbox is:unread',
    maxResults: 25,
    fields: 'messages(id)',
  });
  return messages.map(({ id } = {}) => id);
};

2. قم بإعداد طلب الدفعة

الآن بعد أن أصبح لدينا قائمة بمعرفات رسائل Gmail، نحتاج إلى إعداد الطلب المجمع إلى Gmail API.

الوظيفة getUrlParts() ينشئ سلسلة استعلام URL مع معلمات لطلب حقول وبيانات وصفية محددة لرسائل Gmail. نستخدم معلمة الحقول لطلب الحد الأدنى من البيانات لكل رسالة و metadataHeaders المعلمة لطلب رؤوس بيانات تعريف محددة لكل رسالة.

const getUrlParts = () => {
  const metadata = ['Subject', 'From', 'To'].map((key) => `metadataHeaders=${key}`).join('&');
  const data = {
    fields: 'payload/headers',
    format: `metadata`,
  };
  const fields = Object.entries(data)
    .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
    .join('&');
  return `${fields}&${metadata}`;
};

ال createMessageRequest() تقوم الوظيفة بإنشاء كائن طلب لجلب رسالة محددة من Gmail API باستخدام رمز OAuth المميز.

const GMAIL_API_ENDPOINT = `https://www.googleapis.com/gmail/v1/users/me/messages`;
const createMessageRequest = (messageId) => {
  const urlparts = getUrlParts();
  return {
    url: `${GMAIL_API_ENDPOINT}/${messageId}?${urlparts}`,
    headers: { Authorization: `Bearer ${ScriptApp.getOAuthToken()}` },
    muteHttpExceptions: true,
  };
};

3. قم بتقديم طلب الدفعة

نحن نستخدم fetchAll طريقة خدمة UrlFetch لتقديم طلبات متعددة إلى Gmail API بالتوازي. تأخذ هذه الطريقة مصفوفة من كائنات الطلب، التي أنشأناها في الخطوة السابقة، وجلب رؤوس رسائل البريد الإلكتروني لكل معرف رسالة باستخدام Gmail API.

const makeBatchRequest = (messageIds) => {
  const messageRequests = messageIds.map(createMessageRequest);
  const responses = UrlFetchApp.fetchAll(messageRequests);
  responses.forEach((response) => {
    const messageData = JSON.parse(response);
    const { error, payload: { headers = [] } = {} } = messageData;
    if (error) {
      console.log('Error', error);
    } else {
      headers.forEach(({ name, value }) => {
        Logger.log(name + ': ' + value);
      });
    }
  });
};

راجع أيضًا: إرسال بريد إلكتروني باستخدام Gmail API وNode.js



Source link

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى