İleti dizilerini yönetme

Bu belgede, Gmail API'yi kullanarak ileti dizisi iletilerinin nasıl alınacağı ve ileti dizilerine nasıl ileti ekleneceği açıklanmaktadır.

Gmail API, e-posta yanıtlarını orijinal iletileriyle birlikte tek bir ileti dizisi veya ileti dizisi halinde gruplandırmak için threads kaynağını kullanır. Bu özellik, bir ileti dizisindeki tüm iletileri sırayla almanızı sağlar. Böylece, iletilerle ilgili bağlamı anlamak veya arama sonuçlarını iyileştirmek kolaylaşır.

messages kaynağında olduğu gibi, ileti dizilerine de etiket uygulanabilir. Ancak iletilerin aksine, ileti dizileri oluşturulamaz, yalnızca silinebilir. Ancak iletiler bir ileti dizisine eklenebilir.

İleti dizilerini alma

İleti dizileri, bir görüşmedeki iletileri sırayla alma yöntemidir. 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 yöntemiyle belirli bir ileti dizisini alabilirsiniz.

Aşağıdaki kod örneğinde, gelen kutunuzdaki en çok mesaj içeren ileti dizilerini alan bir örnekte threads.get ve threads.list yöntemlerinin 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. Üç veya daha fazla yanıt içeren iletilerde Subject satırını çıkarırız ve boş olmayan satırları ile ileti dizisindeki ileti sayısını gösteririz.

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()

Ayrıca, messages kaynağı için kullanılan sorgu parametreleriyle aynı olanları kullanarak iş parçacıklarını da filtreleyebilirsiniz. Bir ileti dizisindeki herhangi bir ileti sorguyla eşleşirse ileti dizisi sonuçta döndürülür.

İş parçacıklarına taslak ve ileti ekleme

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

Taslaklar, drafts kaynağı kullanılarak ileti oluşturma, güncelleme veya gönderme işlemlerinin bir parçası olarak ileti dizisine eklenebilir.

Ayrıca, messages kaynağını kullanarak ileti ekleme veya gönderme işleminin bir parçası olarak da ileti dizisine mesaj ekleyebilirsiniz.

Bir taslağın veya mesajın ileti dizisine dahil olabilmesi için aşağıdaki ölçütleri karşılaması gerekir:

  1. İstenen threadId, isteğinizle birlikte sağladığınız drafts.message veya messages kaynağının bir parçası olarak 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.

threadId simgesinin nasıl kullanılacağına dair kod örnekleri için Taslak oluşturma veya Mesaj gönderme başlıklı makaleleri inceleyin. Her iki durumda da isteğinizin messages kaynağına hedef threadId öğesini eklemeniz gerekir.