Kirim formulir ke email Anda5 menit baca
Kirim satu formulir ke beberapa alamat email
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.
Tambahkan setiap orang sebagai penerima formulir di dashboard: anggota workspace dengan mencentangnya, dan orang lain lewat link konfirmasi, hingga 10 alamat. Setiap orang mendapat salinan sendiri dari setiap kiriman. Untuk mengirim pertanyaan penjualan ke satu orang dan dukungan ke orang lain, lakukan perutean berdasarkan field di webhook.
Apa yang berbeda di sini
Skrip PHP lama dan beberapa layanan formulir membiarkan formulir menentukan penerimanya sendiri, dengan field tersembunyi to atau cc. Itu praktis, dan begitu pula cara formulir kontak berubah menjadi relay spam: bot mengubah field tersembunyi itu dan server Anda mengirim email ke siapa pun yang diinginkannya, dari domain Anda. Ikiform tidak punya field penerima. Siapa yang menerima email diatur di dashboard, dan siapa pun di luar workspace harus mengonfirmasi terlebih dulu.
Itu menyisakan dua tugas berbeda, dan keduanya diselesaikan di tempat berbeda:
| Yang Anda inginkan | Tempat mengaturnya | Batas |
|---|---|---|
| Semua orang menerima setiap kiriman | Penerima di pengaturan Notifications formulir | 10 alamat per formulir |
| Setiap kiriman sampai ke orang yang tepat | Webhook yang membaca field dan mengirim email ke satu tim | 3 endpoint webhook per workspace |
Kirim setiap kiriman ke seluruh tim
- Formulir mengirim sekali ke Ikiform.
- Ikiform menyusun daftar penerima: anggota yang dicentang untuk formulir ini, atau default workspace, ditambah alamat luar yang sudah mengonfirmasi.
- Duplikat dibuang dan daftarnya berhenti di 10.
- Setiap penerima mendapat email terpisah, jadi tidak ada yang melihat alamat penerima lain.
- Alamat yang masih menunggu konfirmasi, dan alamat yang dijeda setelah bounce, dilewati.
- Buka formulir di dashboard, lalu Settings dan Notifications. Pastikan Email new submissions menyala.
- Centang setiap anggota workspace yang perlu menerima email. Hanya anggota dengan alamat terverifikasi yang tercantum.
- Untuk siapa pun di luar workspace, masukkan alamatnya di Add someone outside the workspace lalu tekan Send link. Anda bisa menambahkan 5 per formulir.
- Minta mereka mengonfirmasi. Sebelum itu, barisnya berstatus Waiting for confirmation dan mereka tidak menerima apa pun.
Penerima luar melihat field kiriman dan link berhenti berlangganan; mereka tidak mendapat link dashboard, karena tidak punya akun. Anggota mendapat tombol View submission. Jika seseorang keluar, hapus barisnya; jika mereka berhenti berlangganan, barisnya ikut terhapus.
Anggota dan alamat luar
Kedua jenis penerima berperilaku berbeda, yang penting saat Anda memutuskan siapa ditambahkan di mana:
| Item | Anggota workspace | Alamat luar |
|---|---|---|
| Ditambahkan dengan | Mencentangnya di formulir | Send link, lalu konfirmasi dari mereka |
| Yang terlihat di email | Field dan tombol View submission | Field dan link berhenti berlangganan |
| Bisa membuka dashboard | Ya | Tidak |
| Berhenti menerima email saat | Anda menghapus centangnya, atau mereka keluar dari workspace | Anda menghapus barisnya, atau mereka berhenti berlangganan |
| Dihitung terhadap | Batas 10 alamat | Batas 10 alamat dan 5 alamat luar per formulir |
Beri orang yang menjawab pesan kursi di workspace, agar mereka bisa melihat kiriman lama dan spam. Pakai alamat luar untuk orang yang hanya perlu tahu, seperti manajer atau inbox bersama.
Arahkan setiap kiriman berdasarkan topik
Penerima tidak bisa bergantung pada pilihan pengunjung. Untuk itu, tambahkan field yang menyebut timnya, dan biarkan webhook handler kecil memilih alamatnya. Ini formulirnya:
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
<label for="department">Who should read this?</label>
<select id="department" name="department" required>
<option value="sales">Sales</option>
<option value="support">Support</option>
<option value="billing">Billing</option>
</select>
<label for="name">Name</label>
<input id="name" name="name" autocomplete="name" required />
<label for="email">Email</label>
<input id="email" name="email" type="email" autocomplete="email" required />
<label for="message">Message</label>
<textarea id="message" name="message" rows="5" required></textarea>
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
<button>Send</button>
</form>Definisikan department sebagai field select di dashboard, agar kiriman hanya bisa membawa sales, support, atau billing. Bot yang mengirim nilai lain mendapat 422 validation_failed dan tidak pernah sampai ke handler Anda.
Lalu handler-nya. Handler memverifikasi tanda tangan, memilih tim dari department, dan mengirim lewat penyedia email Anda sendiri, di sini Resend. Karena Anda yang mengirim email, Anda juga memilih subjeknya:
import { Resend } from "resend";
import { verifyWebhook, WebhookVerificationError } from "@ikiform/sdk/webhooks";
const resend = new Resend(process.env.RESEND_API_KEY);
const TEAMS: Record<string, string[]> = {
sales: ["sales@example.com"],
support: ["support@example.com", "oncall@example.com"],
billing: ["accounts@example.com"],
};
export async function POST(request: Request) {
const payload = await request.text();
try {
const event = await verifyWebhook({
payload,
headers: request.headers,
secret: process.env.IKIFORM_WEBHOOK_SECRET!,
});
if (event.type !== "submission.created") return new Response(null, { status: 204 });
const fields = event.data.fields;
const department = String(fields.department ?? "support");
const { error } = await resend.emails.send(
{
from: "Website <forms@example.com>",
to: TEAMS[department] ?? TEAMS.support,
replyTo: typeof fields.email === "string" ? fields.email : undefined,
subject: `[${department}] ${String(fields.name ?? "New message")}`,
text: Object.entries(fields)
.map(([key, value]) => `${key}: ${String(value)}`)
.join("\n"),
},
{ idempotencyKey: event.id },
);
if (error) return new Response(error.message, { status: 502 });
return new Response(null, { status: 204 });
} catch (error) {
if (error instanceof WebhookVerificationError) return new Response(error.reason, { status: 400 });
throw error;
}
}- Alamat-alamat itu ada di kode Anda, bukan di formulir. Pengunjung memilih nama tim, tidak pernah alamat.
replyTomembuat Reply tetap mengarah ke pengunjung, sama seperti email milik Ikiform.idempotencyKey: event.idmembuat pengiriman yang dicoba ulang tidak mengirim apa pun yang baru. Ikiform mencoba ulang pengiriman yang tidak mendapat2xx, dengan ID yang sama.502saat penyedia gagal memberi tahu Ikiform untuk mencoba lagi nanti, sehingga gangguan singkat tidak menghilangkan pesan.- Departemen yang tidak dikenal atau kosong dialihkan ke support, alih-alih membuang pesannya.
Tambahkan URL di Webhooks pada dashboard dan salin secret whsec_-nya ke IKIFORM_WEBHOOK_SECRET. Dokumentasi webhook membahas percobaan ulang dan payload. Lebih suka tanpa kode? Alur Zapier atau n8n dengan filter per departemen melakukan hal yang sama.
Biarkan email Ikiform tetap menyala untuk satu orang sebagai cadangan, atau matikan Email new submissions agar tidak ada yang menerima pesan dua kali.
Pastikan berfungsi
- Cek setiap baris penerima di pengaturan Notifications formulir. Tidak boleh ada yang berstatus Waiting for confirmation.
- Isi formulir di halaman Anda lalu kirim. Anda mendarat di halaman terima kasih Anda, atau halaman hosted milik Ikiform.
- Setiap penerima mendapat email sendiri. Minta salah satunya mengecek baris To: isinya hanya alamat mereka.
- Jika Anda melakukan perutean lewat webhook, kirim sekali per departemen dan cek log pengiriman di Webhooks. Masing-masing menampilkan
succeeded. - Kirim dengan honeypot terisi,
_gotcha=bot. Kiriman tetap mendapat jawaban sukses, tetapi disimpan sebagai spam dan tidak memicu email atau webhook.
Hal yang sering menjebak
- Tanpa CC atau BCC. Setiap penerima mendapat pesan terpisah, jadi tidak ada percakapan bersama. Sepakati siapa yang membalas, atau lakukan perutean berdasarkan topik.
- Batasnya menghitung kiriman, bukan penerima. Lewat dari 50 kiriman per jam di satu formulir, setiap penerima mendapat ringkasan sebagai gantinya.
- Perubahan keanggotaan. Saat seseorang keluar dari workspace, mereka langsung berhenti menerima email. Cek penerima formulir setelah ada perubahan tim, agar formulir tidak berakhir mengirim email ke tidak seorang pun.
- Alamat yang bounce dijeda. Barisnya menampilkan Emails bounced dengan tanggal, dan email ke alamat itu dilanjutkan setelahnya. Perbaiki alamatnya atau hapus.
- Tidak ada yang dikirim ke pengunjung. Ikiform tidak mengirim email ke orang yang mengisi formulir. Email notifikasi hanya dikirim ke Anda dan tim, jadi tidak ada autoresponder, email konfirmasi, atau double opt-in. Kirim semua itu dari alat email Anda, dipicu oleh webhook.
Pertanyaan
Ikiform menjeda email ke alamat itu untuk sementara dan menandai barisnya Emails bounced di pengaturan formulir. Penerima lain tidak terpengaruh. Perbaiki alamatnya atau hapus.
Hingga 10. Termasuk anggota workspace yang Anda centang dan hingga 5 alamat luar, yang masing-masing mengonfirmasi lewat link terlebih dulu.
Tidak, dan itu disengaja. Field penerima akan membuat siapa pun bisa memakai formulir untuk mengirim email ke alamat mana pun. Lakukan perutean berdasarkan field select di webhook, dengan alamat disimpan di kode Anda sendiri.
Tidak. Setiap penerima mendapat email terpisah yang hanya ditujukan kepada mereka.
Bisa, dengan webhook. Tambahkan select departemen ke formulir, lalu biarkan handler kecil atau alat otomasi memilih alamat dan mengirim emailnya.
Mentok di salah satu langkah, atau ingin panduan untuk situasi Anda? Email hello@ikiform.com.