# Kirim formulir website ke Gmail (dan mengapa mailto: gagal)

> Terima kiriman formulir di Gmail tanpa link mailto:, app password, atau Apps Script, lalu beri label, jauhkan dari spam, dan balas dari Gmail.

Terbit 2026-10-25 · https://ikiform.com/id/guides/send-form-to-email/gmail

Kirim formulir ke form backend dan tambahkan alamat Gmail Anda sebagai penerima; jangan pakai action `mailto:`, yang hanya membuka aplikasi email pengunjung. Lalu tambahkan filter Gmail untuk pengirimnya agar kiriman tidak masuk spam dan mendapat label sendiri. Menekan **Reply** di Gmail akan membalas ke pengunjung, dari alamat Anda sendiri.

## Apa yang berbeda di sini

Gmail adalah kotak surat, bukan layanan pengiriman untuk situs Anda. Gmail tidak punya URL yang bisa dituju formulir, jadi setiap jalur ke Gmail melewati sesuatu yang lain. Hal pertama yang dicoba kebanyakan orang adalah `mailto:`:

`Formulir yang tampaknya berfungsi`:

```html
<form action="mailto:you@gmail.com" method="post" enctype="text/plain">
  <input name="name" />
  <input name="email" type="email" />
  <textarea name="message"></textarea>
  <button>Send</button>
</form>
```

Memang berfungsi, di komputer Anda. Anda menekan **Send**, aplikasi email terbuka dengan field di badan pesan, dan Anda mengirimnya ke diri sendiri. Pengalaman pengunjung berbeda:

Diagram: Apa yang dilakukan formulir mailto: di perangkat pengunjung

1. Pengunjung menekan Send. Browser tidak mengirim formulir ke mana pun; ia menyerahkan link mailto: ke sistem operasi.
2. Jika tidak ada aplikasi email atau web handler yang disiapkan, yang umum di laptop kantor dan bagi pengguna Gmail di browser, tidak ada yang terjadi atau sistem menanyakan aplikasi mana yang dipakai.
3. Jika ada, draf terbuka di aplikasi email milik pengunjung dengan field ditempel di badan pesan.
4. Pengunjung harus menekan Send untuk kedua kalinya, dari akun mereka sendiri. Banyak yang malah menutup drafnya, dan Anda tidak pernah tahu mereka sempat mencoba.

Setiap langkah setelah yang pertama terjadi di perangkat pengunjung, jadi Anda tidak bisa melihat di mana orang berhenti.

Saat pesan berhasil sampai, badannya berupa baris `name=value` mentah, karena itulah hasil encoding `text/plain`:

`Yang sampai`:

```text
name=Ada Lovelace
email=ada@example.com
message=Hi, do you take on small bathroom jobs in March?
```

Jalur lain ke Gmail berfungsi, tetapi masing-masing butuh server yang Anda jalankan:

| Jalur | Yang dibutuhkan | Kendala |
| --- | --- | --- |
| SMTP Gmail dengan app password | Server yang menjalankan kode, dan Verifikasi 2 Langkah di akun Google | Password itu bisa mengirim atas nama Anda dari mana saja, jadi tidak boleh sampai ke browser. Google juga membatasi berapa banyak yang bisa dikirim akun pribadi per hari |
| Google Apps Script dengan `MailApp` | Skrip yang di-deploy sebagai web app | Akun pribadi bisa mengirim email ke 100 penerima per hari dari skrip. URL-nya publik tanpa perlindungan spam, jadi satu bot bisa menghabiskannya |
| Form backend | URL backend di `action` | Email datang dari alamat layanan, bukan alamat Anda. Reply-to memperbaiki bagian yang penting |

Apps Script layak dilihat lebih dekat, karena jalur inilah yang disarankan kebanyakan tutorial. Anda menulis fungsi `doPost`, men-deploy-nya sebagai web app yang bisa dipanggil siapa saja, lalu mengarahkan formulir ke URL-nya. Itu berfungsi, tetapi kiriman formulir biasa membuat pengunjung berakhir di halaman yang disajikan dari domain Google, bukan domain Anda, setiap bot yang menemukan URL-nya bisa menghabiskan kuota harian, dan skrip berjalan atas nama Anda, jadi bug di dalamnya bisa mengirim email ke siapa saja dari akun Anda. Anda juga harus mengurus setiap perubahan field formulir sejak saat itu.

## Kirim formulir ke Gmail

Ini formulir untuk usaha jasa kecil. Field `job` membuat inbox mudah dipindai, dan `email` diberi nama begitu agar balasan terkirim ke pengunjung:

`contact.html`:

```html
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <label for="name">Your name</label>
  <input id="name" name="name" autocomplete="name" required />

  <label for="email">Email for our reply</label>
  <input id="email" name="email" type="email" autocomplete="email" required />

  <label for="job">What do you need?</label>
  <select id="job" name="job" required>
    <option value="">Choose one</option>
    <option value="repair">A repair</option>
    <option value="quote">A quote for a new job</option>
    <option value="other">Something else</option>
  </select>

  <label for="message">Details</label>
  <textarea id="message" name="message" rows="5" required></textarea>

  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send to our inbox</button>
</form>
```

1. Buat formulir di Ikiform dan ganti `frm_xxxxxxxxxxxxxxxx` dengan ID-nya.
2. Jika Anda mendaftar dengan alamat Gmail, Anda sudah menerima emailnya sebagai owner workspace. Jika tidak, buka pengaturan **Notifications** formulir, masukkan alamat Gmail di **Add someone outside the workspace**, lalu tekan **Send link**.
3. Buka email konfirmasi di Gmail dan konfirmasikan. Sebelum itu, alamatnya berstatus **Waiting for confirmation** dan tidak menerima apa pun.
4. Tambahkan domain Anda di **Allowed domains** formulir, publikasikan halamannya, lalu kirim uji coba.

## Jauhkan dari spam dengan filter Gmail

Email pertama dari pengirim baru bisa masuk ke **Spam** atau **Promotions**. Filter untuk pengirimnya memperbaiki itu untuk seterusnya. Di Gmail, buka opsi pencarian, isi `notifications@ikiform.com` di **From**, tekan **Create filter**, lalu centang **Never send it to Spam**, **Apply the label**, **Always mark it as important**, dan **Categorize as: Primary**, yang menjauhkannya dari **Promotions**.

Atau impor filternya. Ini format yang ditulis fitur **Export** filter milik Gmail sendiri; Google tidak mendokumentasikannya secara terpisah, jadi jika impor gagal, buat filter secara manual seperti di atas. Simpan sebagai `mailFilters.xml`, lalu buka **Settings**, **See all settings**, **Filters and Blocked Addresses**, **Import filters**:

`mailFilters.xml`:

```text
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006">
  <title>Mail Filters</title>
  <entry>
    <category term="filter"></category>
    <title>Mail Filter</title>
    <content></content>
    <apps:property name="from" value="notifications@ikiform.com"/>
    <apps:property name="label" value="Website"/>
    <apps:property name="shouldNeverSpam" value="true"/>
    <apps:property name="shouldAlwaysMarkAsImportant" value="true"/>
    <apps:property name="smartLabelToApply" value="^smartlabel_personal"/>
  </entry>
</feed>
```

Buat label **Website** terlebih dulu, atau ganti namanya di file. Satu filter mencakup semua formulir, karena semua notifikasi datang dari alamat yang sama. Untuk memisahkan formulir ke label berbeda, filter berdasarkan subjek, seperti `subject:("New submission: Quote request")`.

> Gmail mengabaikan titik dan apa pun setelah tanda plus di bagian sebelum @. Menambahkan `you+site@gmail.com` sebagai penerima tetap mengirim ke inbox biasa Anda, dan filter pada **To** lalu bisa membedakan email dari situs dengan yang lain. Alamat ini dihitung sebagai alamat luar, jadi dikonfirmasi lewat link seperti alamat lainnya.

## Membalas dari Gmail

Gmail mematuhi header reply-to, jadi **Reply** ditujukan ke pengunjung. Jawaban Anda dikirim dari alamat Gmail Anda, tanpa Ikiform di dalam percakapan.

- Untuk membalas dari alamat bisnis Anda, tambahkan alamat itu di **Settings**, **Accounts and Import**, **Send mail as**, lalu pilih di baris **From** saat membalas.
- Gmail mungkin mengelompokkan notifikasi dengan subjek sama ke dalam satu percakapan, karena subjeknya selalu `New submission:` diikuti nama formulir. Matikan **Conversation view** di pengaturan Gmail jika Anda lebih suka satu baris per pesan.
- Ringkasan per jam tidak punya reply-to, karena mencakup banyak pengunjung. Balas pesan-pesan itu lewat link di dashboard.

## Pastikan berfungsi

1. Isi formulir di halaman Anda lalu kirim. Anda mendarat di halaman terima kasih Anda, atau halaman hosted milik Ikiform.
2. Temukan email di Gmail. Email itu punya label Anda dan tidak ada di **Spam** atau **Promotions**.
3. Tekan **Reply**. Baris **To** berisi alamat yang diketik di formulir.
4. Kirim dengan honeypot terisi, `_gotcha=bot`. Kiriman tetap mendapat jawaban sukses, tetapi disimpan sebagai spam dan tidak memicu email atau webhook.
5. Tidak ada yang masuk? Ubah filter status di dashboard ke **Spam**. Spam mendapat jawaban sukses yang sama dengan kiriman asli.

## Hal yang sering menjebak

- **Alias Google Workspace.** Jika penerimanya alias atau Google Group, pengaturan grup itu sendiri yang menentukan apakah pengirim dari luar diizinkan. Kirim uji coba sebelum mengandalkannya.
- **Konfirmasi masuk spam.** Email berisi link konfirmasi juga datang dari Ikiform. Jika tidak muncul, cek **Spam** dan tandai sebagai bukan spam.
- **Beberapa alamat Gmail.** Setiap formulir mengirim email ke total maksimal 10 alamat, dan setiap alamat luar dikonfirmasi terpisah.
- **Link mailto: lama di tempat lain.** Link `mailto:` di footer tidak masalah sebagai link. Masalahnya hanya `mailto:` sebagai `action` formulir.

## Pertanyaan

### Bisakah saya mengirim kiriman formulir ke alamat Google Workspace?

Bisa. Alamat Workspace berfungsi seperti penerima lainnya. Jika berupa Google Group atau alias, pastikan grup itu menerima email dari pengirim luar, lalu kirim uji coba.

### Mengapa formulir mailto: saya tidak mengirim apa pun?

Action mailto: tidak pernah mengirim. Ia meminta perangkat pengunjung membuka aplikasi email dengan draf. Jika tidak ada yang disiapkan, tidak ada yang terjadi, dan jika ada, pengunjung tetap harus menekan Send di aplikasi itu.

### Bisakah saya memakai SMTP Gmail untuk mengirim email formulir?

Hanya dari server yang Anda jalankan, dengan app password di akun yang memakai Verifikasi 2 Langkah. Jangan pernah menaruh password itu di kode browser; password itu bisa mengirim email atas nama Anda.

### Bagaimana mencegah email formulir masuk spam di Gmail?

Buat filter Gmail untuk email dari notifications@ikiform.com dan centang Never send it to Spam. Terapkan label sekaligus, agar pesan formulir mudah ditemukan.

### Bisakah saya membalas dari Gmail ke orang yang mengisi formulir?

Bisa, jika field email formulir bernama email, email_address, your_email, reply_to, contact_email, atau formulir mengirim field _replyto. Gmail lalu menaruh pengunjung di baris To saat Anda menekan Reply.

## Panduan lainnya

- [Kirim formulir ke email Anda](https://ikiform.com/id/guides/send-form-to-email.md): Terima setiap kiriman formulir di inbox tanpa mail server: mengapa mailto: dan mail() PHP gagal, dan setup yang menyaring spam serta memungkinkan Anda membalas.
- [Balas dari inbox Anda](https://ikiform.com/id/guides/send-form-to-email/reply-to.md): Buat Reply di notifikasi formulir membalas ke orang yang mengisi formulir: nama field yang berfungsi, kapan memakai _replyto, dan mengapa balasan bisa nyasar.
- [Tanpa PHP](https://ikiform.com/id/guides/send-form-to-email/without-php.md): Ganti skrip contact.php yang memanggil mail() dengan formulir yang mengirim ke endpoint hosted, dengan nama field, halaman terima kasih, dan balasan tetap sama.
- [Beberapa penerima](https://ikiform.com/id/guides/send-form-to-email/multiple-recipients.md): Kirim email dari satu formulir ke seluruh tim, atau arahkan setiap pesan ke orang yang tepat berdasarkan topik, tanpa membiarkan formulir sendiri memilih siapa yang menerima email.
- [Alternatif EmailJS](https://ikiform.com/id/guides/send-form-to-email/emailjs-alternative.md): Pindahkan formulir kontak dari EmailJS: mengapa key email di sisi browser berisiko, apa yang berubah di kode Anda, dan apa yang Anda lepaskan, seperti balasan otomatis.
- [Next.js](https://ikiform.com/id/guides/send-form-to-email/nextjs.md): Dua cara mengirim email dari formulir Next.js dengan Server Action: kirim sendiri dengan Resend atau Nodemailer, atau teruskan ke form backend, dibandingkan secara jujur.
