Titik dan alias plus di Gmail: cara menangkap pendaftaran ganda
j.doe+7@gmail.com dan jdoe@gmail.com adalah kotak masuk yang sama. Cara kerja pengalamatan Gmail, fungsi normalisasi dalam JavaScript dan Python, serta kasus tepi yang sering bermasalah.
Satu kotak masuk, alamat tanpa batas
Gmail punya dua aturan alamat yang membuat pembuatan banyak akun dari satu kotak masuk menjadi sangat mudah:
- Titik diabaikan. Untuk alamat
@gmail.com,jane.doe,janedoe, danj.a.n.e.d.o.eadalah kotak masuk yang sama. Nama sepuluh huruf punya ratusan variasi bertitik. - Apa pun setelah tanda plus diabaikan.
janedoe+uji1@gmail.com,janedoe+uji2@gmail.com, dan seterusnya dikirim kejanedoe@gmail.com. Jumlah variasinya tidak terbatas.
Selain itu, @googlemail.com adalah layanan yang sama dengan @gmail.com. Setiap variasi lolos verifikasi e-mail, karena e-mail konfirmasinya benar-benar tiba. Bagi formulir pendaftaran Anda, semuanya adalah pengguna berbeda yang baru.
Pengalamatan plus bukan hanya milik Gmail: Fastmail dan Proton Mail juga mendukungnya, begitu pula banyak server e-mail perusahaan. Sementara itu, mengabaikan titik adalah ciri khas Gmail pribadi.
Normalkan, lalu bandingkan
Solusinya adalah menyimpan bentuk ternormalisasi dari setiap alamat di samping aslinya, lalu membandingkan pendaftaran baru dengannya. Simpan alamat asli untuk mengirim e-mail — itulah yang diketik pengguna, dan sebagian orang memakai tag plus untuk menyaring surat.
// JavaScript function normalizeEmail(input) { const raw = input.trim().toLowerCase(); const at = raw.lastIndexOf("@"); if (at < 1) return null; let local = raw.slice(0, at); let domain = raw.slice(at + 1).replace(/\.$/, ""); if (domain === "googlemail.com") domain = "gmail.com"; const plus = local.indexOf("+"); if (plus > 0) local = local.slice(0, plus); if (domain === "gmail.com") local = local.replaceAll(".", ""); return `${local}@${domain}`; } normalizeEmail("J.Doe+trial7@GoogleMail.com"); // "jdoe@gmail.com"
# Python def normalize_email(value: str) -> str | None: raw = value.strip().lower() local, sep, domain = raw.rpartition("@") if not sep or not local: return None domain = domain.rstrip(".") if domain == "googlemail.com": domain = "gmail.com" base = local.split("+", 1)[0] or local if domain == "gmail.com": base = base.replace(".", "") return f"{base}@{domain}"
Lalu tambahkan kolom dan indeks, dan lakukan pencarian saat pendaftaran:
ALTER TABLE users ADD COLUMN email_normalized text; CREATE INDEX users_email_normalized ON users (email_normalized); -- saat pendaftaran SELECT count(*) FROM users WHERE email_normalized = $1;
Kasus tepi yang sering bermasalah
- Jangan hapus titik di luar Gmail pribadi. Di kebanyakan penyedia, dan di domain perusahaan Google Workspace,
jane.doe@danjanedoe@adalah orang yang berbeda. Menghapus titik di sana menyatukan orang asing. - Menghapus plus di penyedia lain hanyalah heuristik. Hampir di mana-mana tag plus adalah alias, tetapi server e-mail boleh memperlakukan
+sebagai karakter biasa. Anggap kecocokan di luar Gmail sebagai sinyal, bukan bukti. - Jangan tolak tag plus itu sendiri. Banyak orang yang berhati-hati memakai
nama+layanan@gmail.comdi setiap situs. Tag plus pada kotak masuk baru itu wajar; tag plus pada kotak masuk yang sudah punya akun itulah sinyalnya. - Ubah ke huruf kecil sebelum membandingkan, serta hapus spasi dan titik di akhir. Dalam praktiknya, penyedia tidak membedakan huruf besar-kecil di bagian lokal.
- Penyedia lain punya skema alias sendiri (alamat sekali pakai Yahoo, alias Outlook di akun yang sama). Ini tidak tertangkap lewat normalisasi — di sinilah sinyal perangkat dan jaringan berperan.
Apa yang dilakukan saat cocok
Kecocokan setelah normalisasi berarti akun baru menerima e-mail di kotak masuk yang sudah punya akun di layanan Anda. Biasanya respons yang tepat bukan galat, melainkan dorongan halus: “Anda sudah punya akun dengan e-mail ini — ingin masuk?”. Untuk uji coba dan kredit gratis, ini juga alasan kuat untuk tidak memberi uji coba atau mengirim pendaftaran ke tinjauan. Lihat Cara mencegah penyalahgunaan uji coba gratis untuk alur keputusan lengkap.
Cara Attrelix menanganinya
Setiap pemeriksaan menormalkan alamat (titik Gmail, tag plus, googlemail.com, dan domain Proton), mencari akun yang ada dengan kotak masuk yang sama, dan menambahkan alasan alias_of_existing bila menemukannya. Alamat asli di data Anda tidak pernah diubah, dan akun yang terkait dikembalikan dalam respons agar Anda bisa melihat seluruh kelompoknya.
Ringkasan
- Gmail mengabaikan titik dan tag plus; banyak penyedia mengabaikan tag plus.
- Simpan alamat ternormalisasi di samping aslinya dan beri indeks.
- Hapus titik hanya untuk Gmail pribadi; anggap kecocokan lain sebagai sinyal.
- Saat cocok, arahkan untuk masuk dan jangan beri uji coba kedua.