> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Log Email Pelanggan

> Lihat setiap email transaksional yang dikirim Dodo Payments kepada pelanggan, periksa apakah email tersebut sampai, baca email persis seperti saat dikirim, dan kirim ulang.

<CardGroup cols={2}>
  <Card title="List Customer Emails" icon="list" href="/api-reference/customers/list-customer-emails">
    Baca email yang dikirim kepada pelanggan dan hasil pengirimannya.
  </Card>

  <Card title="Get Email Content" icon="envelope-open" href="/api-reference/customers/get-customer-email-body">
    Baca satu email persis seperti saat dikirim.
  </Card>
</CardGroup>

## Ringkasan

Dodo Payments mengirim email transaksional kepada pelanggan Anda atas nama Anda: tanda terima, pemberitahuan pengembalian dana, pemberitahuan langganan, email penagihan dan pemulihan, pemberian hak akses, serta tautan login Customer Portal.

Tab **Sent Emails** pada pelanggan mencatat setiap email. Untuk setiap email, Anda dapat melihat apa yang dikirim, sejauh mana prosesnya berlangsung, dan alasan email tidak sampai jika terjadi kegagalan. Anda dapat membuka email yang diterima pelanggan, lalu mengirimnya kembali.

<Frame>
  <img src="https://mintcdn.com/dodopayments/9G2eOufWVa-OvQvG/images/email-logs/sent-emails-tab.png?fit=max&auto=format&n=9G2eOufWVa-OvQvG&q=85&s=6c7fa235800cee5c32eb286312f2a52b" alt="Tab Email Terkirim pada pelanggan, yang mencantumkan setiap email beserta status pengirimannya" style={{ maxHeight: '500px', width: 'auto' }} width="2310" height="996" data-path="images/email-logs/sent-emails-tab.png" />
</Frame>

<Info>
  Email disimpan selama **180 hari**. Status pengiriman berasal dari penyedia email dan biasanya diperbarui dalam hitungan detik setelah setiap peristiwa pengiriman.
</Info>

## Melihat Email Pelanggan

<Steps>
  <Step title="Open the Customer">
    Buka **Sales → Customers** di dashboard, lalu pilih pelanggan.
  </Step>

  <Step title="Open the Sent Emails Tab">
    Tab ini mencantumkan setiap email yang dikirim kepada pelanggan ini dalam 180 hari terakhir, dengan yang terbaru di urutan pertama.
  </Step>

  <Step title="Read a Row">
    Setiap baris menampilkan subjek, dengan alamat pengirim dan penerima di bawahnya. Kolom lainnya menampilkan **Category**, **Date & Time**, **Delivery Status**, dan **Actions** yang dapat Anda lakukan.
  </Step>
</Steps>

Kategori dapat berupa **Payments**, **Refunds**, **Subscriptions**, **Dunning & Recovery**, **Entitlements**, atau **Auth**. Email login Customer Portal termasuk dalam **Auth**.

## Status Pengiriman

Setiap email memiliki salah satu dari lima status. API mengembalikan nilai status, sedangkan dashboard menampilkan labelnya:

| Status | Label dashboard | Arti |
| - | - | - |
| `sent` | **Sent** | Dodo Payments menyerahkan email kepada penyedia. Email sedang dalam perjalanan, atau server penerima belum memberikan respons. |
| `delivered` | **Delivered** | Server email penerima menerima email tersebut. |
| `failed` | **Failed** | Email tidak sampai. Alasan kegagalan ditampilkan. |
| `complained` | **Marked as spam** | Penerima menandai email sebagai spam. |
| `blocked` | **Not sent** | Tidak ada email yang dikirim karena kuota mingguan mode pengujian telah habis. |

### Alasan Kegagalan

Jika email tidak sampai, baris tersebut mencantumkan alasannya agar Anda tahu apakah perlu mengambil tindakan. Arahkan kursor ke status pada baris untuk membacanya. API mengembalikan alasan yang sama dalam `failure_reason` dan kode stabil dalam `failure_code`:

| Alasan | `failure_reason` | Artinya | Tindakan |
| - | - | - | - |
| Kotak surat tidak ada | `mailbox_not_found` | Alamat tersebut tidak ada. | Perbaiki alamat email pelanggan. |
| Alamat ditolak oleh server email | `address_rejected` | Server penerima menolak alamat tersebut. | Gunakan alamat lain. |
| Alamat diblokir setelah kegagalan sebelumnya | `address_suppressed` | Penyedia menekan alamat ini setelah hard bounce atau keluhan sebelumnya. | Gunakan alamat lain. |
| Kotak surat penuh | `mailbox_full` | Kotak surat penerima kehabisan ruang. | Kirim lagi nanti. |
| Kegagalan pengiriman sementara | `temporary_failure` | Masalah sementara pada server penerima. | Kirim lagi nanti. |
| Pesan ditolak karena terlalu besar | `message_too_large` | Server penerima menolak ukuran pesan tersebut. | Hubungi dukungan. |
| Penerima menandai email sebagai spam | `marked_as_spam` | Penerima melaporkan email tersebut. | Jangan mengirimnya lagi. |
| Email tidak dapat dikirim | `send_failed` | Penyedia menolak pengiriman, atau kegagalannya tidak sesuai dengan kode lainnya. | Kirim lagi. |
| Tidak dikirim: kuota email mode pengujian untuk minggu ini telah habis | `test_mode_quota_spent` | [Kuota mode pengujian](#test-mode) mingguan telah habis. | Tunggu hingga kuota direset. |

Lima dari alasan ini memerlukan alamat lain saat dikirim ulang karena alamat yang sama akan gagal lagi: kotak surat tidak ada, alamat ditolak, alamat diblokir setelah kegagalan sebelumnya, pesan ditolak karena terlalu besar, dan penerima menandai email sebagai spam.

## Membaca Email

Untuk membaca email, pilih **Resend** pada barisnya, atau **Retry** pada baris yang gagal. Panel yang terbuka menampilkan salinan tersimpan di bawah **Email Preview**, persis seperti saat email dikirim. Email recovery dan dunning yang Anda tulis memiliki label **Written by you**.

<Frame>
  <img src="https://mintcdn.com/dodopayments/9G2eOufWVa-OvQvG/images/email-logs/email-preview.png?fit=max&auto=format&n=9G2eOufWVa-OvQvG&q=85&s=b0d00b4b6fe62c6ace0b8a2b4419619b" alt="Konten email tersimpan, ditampilkan seperti yang diterima pelanggan" style={{ maxHeight: '500px', width: 'auto' }} width="824" height="1148" data-path="images/email-logs/email-preview.png" />
</Frame>

Beberapa email tidak memiliki konten untuk ditampilkan:

* **Email login Customer Portal.** Email ini membawa tautan login aktif, sehingga kontennya tidak pernah ditampilkan.
* **Email yang diblokir.** Email tersebut tidak pernah sampai ke penyedia, sehingga tidak ada salinannya.
* **Email yang tidak dapat diserahkan kepada penyedia.** Tidak ada salinan yang disimpan.
* **Email yang berusia lebih dari 180 hari.** Penyedia menghapus kontennya setelah jangka waktu tersebut.

## Mengirim Email Lagi

Untuk mengirim email lagi, pilih **Resend** pada barisnya, atau **Retry** pada baris yang gagal, lalu konfirmasikan di panel. Tombol tersebut menunjukkan berapa kali lagi email dapat dikirim ulang. Dodo Payments membuat ulang email dari peristiwa asli, bukan dari salinan tersimpan, sehingga tanda terima menampilkan status pembayaran terkini. Email tetap menggunakan tanggal peristiwa asli.

<Frame>
  <img src="https://mintcdn.com/dodopayments/9G2eOufWVa-OvQvG/images/email-logs/resend-email.png?fit=max&auto=format&n=9G2eOufWVa-OvQvG&q=85&s=8751c05df35b14f116c8d487eaae7b70" alt="Kontrol pengiriman ulang pada baris email, dengan opsi untuk mengirim ke alamat lain" style={{ maxHeight: '500px', width: 'auto' }} width="896" height="2104" data-path="images/email-logs/resend-email.png" />
</Frame>

Kolom **To** pada panel berisi alamat asli. Untuk mengirim email ke alamat lain, ubah alamat tersebut. Setelah kegagalan permanen, kolom **To** akan kosong dan Anda harus memasukkan alamat lain karena alamat asli akan gagal lagi.

<Warning>
  Pengiriman ulang adalah email baru. Pelanggan menerima salinan lain, dan pengiriman ulang muncul sebagai baris tersendiri di tab.
</Warning>

### Batas

Batas berikut berlaku untuk setiap pengiriman ulang:

* Setiap email dapat dikirim ulang **tiga kali**.
* Pengiriman ulang satu email ke alamat yang sama memiliki jeda antarpercobaan: lima menit setelah pengiriman terbaru sebelum pengiriman ulang pertama, sepuluh menit sebelum pengiriman ulang kedua, dan lima belas menit sebelum pengiriman ulang ketiga.
* Pengiriman ulang ke alamat mana pun menunggu hingga lima menit berlalu sejak alamat tersebut terakhir menerima email dari Anda.
* Pengiriman yang tidak pernah sampai ke penyedia tidak dihitung dalam batas tiga kali. Namun, pengiriman tersebut tetap menambah waktu tunggu.
* Resend hanya tersedia di dashboard. API bersifat read-only.

### Saat Resend Tidak Tersedia

Dashboard tidak menawarkan pengiriman ulang, atau menolaknya, dalam kasus berikut:

| Kasus | Alasan |
| - | - |
| Penerima menandai email sebagai spam | Penerima meminta agar email ini dihentikan. |
| Alamat diblokir | Penyedia menerima pengiriman ke alamat tersebut lalu menghapusnya. Masukkan alamat lain. |
| Pengiriman berikutnya untuk email yang sama sudah dilakukan | Baris ini adalah riwayat, ditandai **Dikirim pada percobaan berikutnya**. Mengirimnya lagi akan mengirimkan salinan kedua. |
| Customer diblokir | [Customer yang diblokir](/features/customer-blocklist) tidak akan menerima email berikutnya dari Anda. |
| Tiga pengiriman ulang telah digunakan | Batas berlaku per email. |
| Data asli sudah tidak ada | Dodo Payments tidak dapat membuat ulang email tersebut. |
| Peran tim Anda adalah **Viewer** | Viewer tidak melihat tindakan pengiriman ulang pada baris tersebut. |
| **Test Mode Emails** dinonaktifkan dalam mode pengujian | Email customer dalam mode pengujian dinonaktifkan untuk bisnis Anda. Lihat [Test Mode](#test-mode). |

<Note>
  Email login Customer Portal selalu dikirim ke alamat yang memintanya, dan setiap pengiriman ulang membuat tautan login baru.
</Note>

## Mode Pengujian

Test mode mengirimkan email sungguhan, sehingga memiliki batas: **100 email per bisnis per minggu**. Pengiriman ulang menggunakan batas yang sama. Setiap email dalam test mode dikirim ke penerima sebenarnya, dengan `[TEST MODE]` di awal subjek.

Untuk menghentikan email customer dalam test mode, nonaktifkan **Test Mode Emails** di **Settings → Communication → Email** (lihat [Test Mode Emails](/features/communication-preferences#test-mode-emails)). Selama dinonaktifkan, tidak ada email customer yang dikirim dalam test mode, tidak ada baris yang ditambahkan ke tab, tidak ada batas yang digunakan, dan dashboard menolak pengiriman ulang. Email dalam live mode tidak terpengaruh.

Saat batas telah digunakan, tidak ada lagi yang dikirim dalam test mode pada minggu tersebut. Email pertama yang ditolak pada minggu itu dicatat sebagai satu baris `blocked`, yang berbunyi "Not sent: the test-mode email allowance for this week is spent". Penolakan berikutnya pada minggu yang sama tidak menambahkan baris. Batas diatur ulang pada awal setiap minggu, yaitu hari Senin. Live mode tidak memiliki batas seperti ini.

<Info>
  Email login Customer Portal tidak pernah dikirim dalam test mode, dan tidak menggunakan batas.
</Info>

## Membaca Email Melalui API

Daftar dan konten juga tersedia melalui API key Anda, sehingga Anda dapat menampilkan status pengiriman di alat dukungan Anda sendiri. Daftar tersebut mengembalikan 10 email per halaman secara default. Atur `page_size` untuk mengembalikan hingga 100, dan `page_number` untuk berpindah halaman, dimulai dari 0.

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://live.dodopayments.com/customers/cus_123/emails?page_size=10" \
    -H "Authorization: Bearer $DODO_PAYMENTS_API_KEY"
  ```

  ```typescript Node.js expandable theme={null}
  const customerId = 'cus_123'; // the customer whose emails you want to read
  const res = await fetch(
    `https://live.dodopayments.com/customers/${customerId}/emails?page_size=10`,
    { headers: { Authorization: `Bearer ${process.env.DODO_PAYMENTS_API_KEY}` } },
  );
  const { items, total_count } = await res.json();
  ```

  ```python Python expandable theme={null}
  import os, requests

  customer_id = "cus_123"  # the customer whose emails you want to read
  res = requests.get(
      f"https://live.dodopayments.com/customers/{customer_id}/emails",
      params={"page_size": 10},
      headers={"Authorization": f"Bearer {os.environ['DODO_PAYMENTS_API_KEY']}"},
  )
  items = res.json()["items"]
  ```
</CodeGroup>

SDK TypeScript dan Python membungkus kedua endpoint sebagai `client.customers.emails.list()` dan `client.customers.emails.retrieveBody()` (`retrieve_body()` dalam Python).

Setiap item memiliki `email_log_id`, yang Anda teruskan ke endpoint konten, serta `status`. Item tersebut juga memiliki `failure_code` dan `failure_reason` ketika pengiriman gagal, serta `has_preview` untuk menunjukkan apakah konten tersimpan tersedia. Endpoint konten mengembalikan `422` jika email tidak memiliki konten untuk ditampilkan. Setiap item juga memiliki objek `policies` yang menyatakan tindakan yang dapat Anda lakukan pada baris tersebut:

| Field | Arti |
| - | - |
| `resend_allowed` | Email telah dikirim atau disampaikan, dan Anda dapat mengirimnya lagi. |
| `retry_allowed` | Pengiriman gagal, dan Anda dapat mencobanya lagi. |
| `resends_remaining` | Jumlah pengiriman ulang yang tersisa untuk email tersebut. |
| `requires_different_address` | Alamat yang sama akan gagal lagi, jadi Anda harus memberikan alamat lain. |
| `superseded` | Pengiriman berikutnya untuk email yang sama menggantikan baris ini. |

Baca `policies`, bukan menentukan kelayakan sendiri. Server menerapkan aturan di atas.

<CardGroup cols={2}>
  <Card title="Customer Management" icon="user-group" href="/features/customers">
    Kelola customer, riwayat pembelian, dan akses mandiri.
  </Card>

  <Card title="Communication Preferences" icon="bell" href="/features/communication-preferences">
    Pilih email yang dikirim Dodo Payments atas nama Anda.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.