İleti Dizilerini Yönetme

Gmail API, e-posta yanıtlarını orijinal iletileriyle birlikte tek bir ileti dizisi halinde gruplandırmak için Thread kaynaklarını kullanır. Bu sayede, bir görüşmedeki tüm mesajları sırayla alarak bir mesajın bağlamını anlamanız veya arama sonuçlarını iyileştirmeniz kolaylaşır.

İletiler gibi, ileti dizilerine de etiket uygulanabilir. Ancak iletilerden farklı olarak ileti dizileri oluşturulamaz, yalnızca silinebilir. Ancak iletiler ileti dizisine eklenebilir.

İçindekiler

İleti dizileri alınıyor

İleti dizileri, bir görüşmedeki iletileri sırayla almanın basit bir yolunu sunar. Bir ileti dizisi grubu listeleyerek iletileri görüşmeye göre gruplandırmayı seçebilir ve ek bağlam bilgisi sağlayabilirsiniz. threads.list yöntemini kullanarak ileti dizilerinin listesini alabilir veya threads.get ile belirli bir ileti dizisini alabilirsiniz. Ayrıca, Message kaynağı için kullanılan sorgu parametrelerini kullanarak iş parçacıklarını da filtreleyebilirsiniz. Bir ileti dizisindeki herhangi bir mesaj sorguyla eşleşirse bu ileti dizisi sonuçta döndürülür.

Aşağıdaki kod örneğinde, her iki yöntemin de gelen kutunuzdaki en çok mesaj içeren ileti dizilerini gösteren bir örnekte nasıl kullanılacağı gösterilmektedir. threads.list yöntemi tüm ileti dizisi kimliklerini getirir, ardından threads.get her ileti dizisindeki tüm iletileri alır. 3 veya daha fazla yanıt içeren iletilerde Subject satırı çıkarılır ve boş olmayan satırlarla birlikte ileti dizisindeki ileti sayısı gösterilir. Bu kod örneğini, ilgili DevByte videosunda da bulabilirsiniz.

Python

gmail/snippet/thread/threads.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def show_chatty_threads():
  """Display threads with long conversations(>= 3 messages)
  Return: None

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create gmail api client
    service = build("gmail", "v1", credentials=creds)

    # pylint: disable=maybe-no-member
    # pylint: disable:R1710
    threads = (
        service.users().threads().list(userId="me").execute().get("threads", [])
    )
    for thread in threads:
      tdata = (
          service.users().threads().get(userId="me", id=thread["id"]).execute()
      )
      nmsgs = len(tdata["messages"])

      # skip if <3 msgs in thread
      if nmsgs > 2:
        msg = tdata["messages"][0]["payload"]
        subject = ""
        for header in msg["headers"]:
          if header["name"] == "Subject":
            subject = header["value"]
            break
        if subject:  # skip if no Subject line
          print(f"- {subject}, {nmsgs}")
    return threads

  except HttpError as error:
    print(f"An error occurred: {error}")


if __name__ == "__main__":
  show_chatty_threads()

İleti dizilerine taslak ve ileti ekleme

Başka bir e-postaya yanıt olarak gönderilen veya taşınan iletiler ya da bir görüşmenin parçası olan iletiler gönderiyorsanız uygulamanız bu iletiyi ilgili ileti dizisine eklemelidir. Bu sayede, ileti dizisine katılan Gmail kullanıcıları iletinin bağlamını daha kolay koruyabilir.

Taslaklar, taslak mesaj oluşturma, güncelleme veya gönderme işlemleri sırasında ileti dizisine eklenebilir. Ayrıca, bir iletiyi ekleme veya gönderme işleminin bir parçası olarak ileti dizisine mesaj ekleyebilirsiniz.

Bir ileti veya taslağın bir ileti dizisinin parçası olması için aşağıdaki ölçütleri karşılaması gerekir:

  1. İstenen threadId, isteğinizle birlikte gönderdiğiniz Message veya Draft.Message üzerinde belirtilmelidir.
  2. References ve In-Reply-To üstbilgileri, RFC 2822 standardına uygun olarak ayarlanmalıdır.
  3. Subject başlıkları eşleşmelidir.

Taslak oluşturma veya mesaj gönderme örneklerine göz atın. Her iki durumda da, threadId anahtarını ileti dizisi kimliğiyle eşleştirip iletinin meta verilerine (message nesnesi) eklemeniz yeterlidir.