İleti Dizilerini Yönetme

Gmail API, e-posta yanıtlarını orijinal iletileriyle tek bir ileti dizisi veya mesaj dizisi halinde gruplandırmak için Thread kaynaklarını kullanır. Bu sayede, bir ileti dizisindeki tüm iletileri alabilir, böylece iletilerin bağlamını daha kolay anlayabilir veya arama sonuçlarını hassaslaştırabilirsiniz.

Mesajlar gibi ileti dizilerine de etiketler uygulanabilir. Ancak ileti dizisinin aksine, ileti dizileri oluşturulamaz, yalnızca silinebilir. Ancak iletiler ileti dizisine eklenebilir.

İçindekiler

Mesaj dizilerini alma

Mesaj dizileri, bir ileti dizisindeki iletileri sırayla almanın basit bir yolunu sunar. Bir dizi ileti dizisini listeleyerek iletileri görüşmeye göre gruplandırmayı ve ek bağlam bilgisi sağlamayı seçebilirsiniz. threads.list yöntemini kullanarak ileti dizilerinin listesini veya threads.get ile belirli bir ileti dizisini alabilirsiniz. Message kaynağında olduğu gibi aynı sorgu parametrelerini kullanarak ileti dizilerini filtreleyebilirsiniz. Bir ileti dizisindeki herhangi bir mesaj sorguyla eşleşirse söz konusu ileti dizisi sonuçta döndürülür.

Aşağıdaki kod örneğinde, gelen kutunuzda en çok sohbet edilen ileti dizilerini gösteren bir örnekte her iki yöntemin de 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ı olan ileti dizileri için Subject satırını ayıklayıp boş olmayanları ve ileti dizisindeki iletilerin sayısını görüntüleriz. 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 mesaj ekleme

Başka bir e-postaya yanıt olan veya bir ileti dizisinin parçası olan iletiler gönderiyor ya da taşıyorsanız uygulamanız bu iletiyi ilgili ileti dizisine eklemelidir. Bu sayede, ileti dizisine katılan Gmail kullanıcıları mesajı bağlam içinde tutabilir.

Taslak mesaj oluşturma, güncelleme veya gönderme işleminin bir parçası olarak ileti dizisine eklenebilir. Bir iletiyi ekleme veya gönderme işleminin bir parçası olarak da ileti dizisine ekleyebilirsiniz.

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

  1. İstenen threadId, isteğinizle birlikte sağladığınız Message veya Draft.Message üzerinde belirtilmelidir.
  2. References ve In-Reply-To üstbilgileri, RFC 2822 standardına uygun şekilde 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, mesajın meta verilerine (message nesnesi) bir ileti dizisi kimliğiyle eşleştirilmiş bir threadId anahtarı eklemeniz yeterlidir.