İleti Dizilerini Yönetme

Gmail API, e-posta yanıtlarını orijinal iletileriyle tek bir ileti dizisinde gruplandırmak için Thread kaynaklarını kullanır. Bu, bir ileti dizisindeki tüm mesajları sırayla almanızı sağlar. Böylece bir ileti için bağlama sahip olmayı veya arama sonuçlarını hassaslaştırmayı kolaylaştırır.

Mesajlar gibi ileti dizilerine de etiketler uygulanmış olabilir. Ancak, mesajlardan farklı olarak ileti dizileri oluşturulamaz, yalnızca silinir. Ancak iletiler ileti dizisine eklenebilir.

İçindekiler

İleti dizileri alınıyor

İleti dizileri, bir ileti dizisindeki iletileri sırayla almak için basit bir yol sağlar. Bir mesaj dizisi grubunu listeleyerek mesajları ileti dizisine göre gruplandırmayı seçebilir ve ek içerik sağlayabilirsiniz. threads.list yöntemini kullanarak iş parçacıklarının listesini alabilir veya threads.get ile belirli bir iş parçacığını alabilirsiniz. Message kaynağı ile aynı sorgu parametrelerini kullanarak iş dizilerini de 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 ileti dizilerinin gösterildiği bir örnekte nasıl kullanılacağı gösterilmektedir. threads.list yöntemi tüm ileti dizisi kimliklerini getirir ve ardından threads.get her bir ileti dizisindeki tüm mesajları yakalar. 3 veya daha fazla yanıt içerenler için Subject satırını ayıklar ve boş olmayanlarla birlikte ileti dizisindeki mesaj 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()

Taslak ve mesajları ileti dizilerine ekleme

Başka bir e-postaya yanıt olarak veya bir görüşmenin parçası olan mesajlar gönderiyorsanız ya da bu tür mesajları taşıyorsanız uygulamanız bu mesajı ilgili ileti dizisine eklemelidir. Bu, görüşmeye katılan Gmail kullanıcılarının iletiyi bağlam içinde tutmasını kolaylaştırır.

Taslak mesaj oluşturma, güncelleme veya gönderme işlemlerinin parçası olarak ileti dizisine bir taslak eklenebilir. Mesaj ekleme veya gönderme kapsamında bir mesaj dizisine mesaj da ekleyebilirsiniz.

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

  1. İstenen threadId, isteğinizde 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 üstbilgileri eşleşmelidir.

Taslak oluşturma veya mesaj gönderme örneklerine göz atın. Her iki durumda da mesajın meta verileri olan message nesnesine iş parçacığı kimliğiyle eşlenmiş bir threadId anahtarı eklemeniz yeterlidir.