Menerima email dengan Mail API

Panduan ini menjelaskan cara menggunakan Mail API untuk menerima email.

Pesan email yang dikirim ke aplikasi Anda diimplementasikan sebagai permintaan HTTP yang berisi data MIME. Untuk memproses pesan email masuk, kaitkan alamat email dengan pengendali skrip di konfigurasi aplikasi Anda, lalu sertakan pengendali dalam kode aplikasi Anda.

Email masuk menghasilkan permintaan HTTP, yang diteruskan ke skrip yang sesuai. Skrip yang menangani email masuk harus berada di layanan default Anda.

Untuk informasi selengkapnya tentang layanan Mail, lihat Ringkasan Mail API.

Sebelum memulai

Anda harus mendaftarkan email pengirim sebagai pengirim yang sah. Untuk mengetahui informasi selengkapnya, lihat siapa yang dapat mengirim email.

Mengonfigurasi aplikasi Anda untuk menerima email

Ketika Anda membuat aplikasi baru, email masuk dinonaktifkan secara default. Untuk mengaktifkan email masuk, Anda harus mengubah file app.yaml di layanan default.

  1. Tambahkan bagian inbound_services yang mengaktifkan layanan email masuk. Contoh:

    inbound_services:
    - mail

    Jika Anda tidak mengaktifkan email masuk dengan menyertakan bagian ini dalam file konfigurasi, email masuk akan dinonaktifkan, dan pesan email yang dikirim ke aplikasi akan diabaikan.

  2. Tambahkan pemetaan yang mengaitkan alamat email yang dipetakan URL dengan pengendali skrip.

    Untuk layanan default, alamat email untuk menerima email memiliki format berikut:

    [STRING]@[Google Cloud project ID].appspotmail.com
    

    Untuk layanan non-default, alamat email memiliki format berikut:

    [STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
    

    Pesan email dikirim ke aplikasi Anda sebagai permintaan POST HTTP menggunakan URL berikut, dengan [ADDRESS] sebagai alamat email lengkap, termasuk nama domain:

    /_ah/mail/[ADDRESS]
    

    Untuk menangani email masuk di aplikasi Anda, petakan URL email ke pengendali di file app.yaml:

    - url: /_ah/mail/.+
      script: handle_incoming_email.app
      login: admin

    Pada contoh di atas, /_ah/mail/.+ cocok dengan semua email yang dialamatkan ke aplikasi. Jika ingin, Anda dapat menyiapkan beberapa pengendali untuk alamat email yang berbeda, seperti pada contoh berikut:

    - url: /_ah/mail/owner@.*your_app_id\.appspotmail\.com
      script: handle_owner.app
      login: admin
    - url: /_ah/mail/support@.*your_app_id\.appspotmail\.com
      script: handle_support.app
      login: admin
    - url: /_ah/mail/.+
      script: handle_catchall.app
      login: admin

    URL pesan email masuk dicocokkan dengan daftar ini dari awal hingga akhir. Jadi, jika URL pesan email cocok dengan lebih dari satu pola, pengendali pertama yang cocok akan dieksekusi. Dengan begitu, Anda dapat menyertakan pengendali "catchall" sebagai pemetaan terakhir. Pengendali berjalan dalam modul default (atau versi aplikasi).

Menangani email masuk

Saat menggunakan framework web Python, konstruktor InboundEmailMessage menggunakan byte isi permintaan HTTP. Ada beberapa cara untuk membuat objek InboundEmailMessage di Python. Di Flask, request.get_data() memberikan byte permintaan. Objek InboundEmailMessage berisi pesan email. Metode bodies() menampilkan isi dalam pesan. Jika Anda memanggil bodies() tanpa argumen, metode ini akan menampilkan iterator yang menghasilkan isi HTML terlebih dahulu, lalu isi teks biasa. Jika hanya menginginkan HTML atau teks biasa, Anda dapat meneruskan argumen ke bodies():

@app.route("/_ah/mail/<path>", methods=["POST"])
def receive_mail(path):
    message = mail.InboundEmailMessage(request.get_data())

    # Do something with the message
    print(
        f"Received greeting for {escape(message.to)} at {escape(message.date)} from {escape(message.sender)}"
    )
    for content_type, payload in message.bodies("text/plain"):
        print(f"Text/plain body: {payload.decode()}")
        break

    return "OK", 200

Objek InboundEmailMessage menyertakan atribut untuk mengakses kolom pesan lainnya:

  • subject berisi subjek pesan.
  • sender adalah alamat pengirim, misalnya "Nobody <nobody@example.com>"
  • to adalah daftar penerima utama pesan yang dipisahkan koma, misalnya "Joe <joe@example.com>, Bill <bill@example.com>".
  • cc berisi daftar penerima Cc yang dipisahkan koma, misalnya "Joe <joe@example.com>, Bill <bill@example.com>".
  • date menampilkan tanggal pesan.
  • attachments adalah daftar objek Attachment, yang mungkin kosong.
  • original adalah pesan lengkap, termasuk data yang tidak ditampilkan oleh kolom lain seperti header email, sebagai Python email.message.Message.

Menyimulasikan pesan masuk dengan server pengembangan lokal

Setelah menyiapkan aplikasi untuk menangani email masuk, Anda dapat menggunakan konsol server pengembangan untuk menyimulasikan pesan email masuk:

  1. Akses server pengembangan sebagai administrator dengan membuka http://localhost:8080/console, lalu pilih Login sebagai administrator.
  2. Di server pengembangan, klik Email Masuk pada navigasi.
  3. Isi formulir yang muncul, lalu klik Kirim Email.

    Untuk menjalankan server pengembangan, lihat server pengembangan lokal.

Pelajari lebih lanjut pertimbangan migrasi untuk Mail API di panduan Pemroses email.