Apakah alamat email peka huruf besar-kecil?

305

Saya sudah membaca bahwa menurut standar bagian pertama dari email adalah case-sensitive, namun saya sudah mencoba mengirim email ke [email protected], [email protected]dan [email protected]- sudah tiba di setiap case.

Bagaimana server email menangani nama pengguna? Apakah mungkin ketinggalan dengan case dan pesan itu tidak terkirim? Apakah benar-benar sangat penting untuk menggunakan case letter yang persis sama, seperti yang ditulis saat mendaftar ketika memberikan alamat email Anda?

Penguntit
sumber
Pertanyaan terkait - stackoverflow.com/questions/9013726/…
Luke Girvin

Jawaban:

366

Dari RFC 5321, bagian 2.3.11 :

Konvensi penamaan kotak surat standar didefinisikan sebagai "local-part @ domain"; Penggunaan kontemporer memungkinkan serangkaian aplikasi yang jauh lebih luas daripada "nama pengguna" yang sederhana. Akibatnya, dan karena sejarah panjang masalah ketika host perantara telah mencoba untuk mengoptimalkan transportasi dengan memodifikasi mereka, bagian lokal HARUS ditafsirkan dan ditugaskan semantik hanya oleh host yang ditentukan dalam bagian domain dari alamat.

Jadi ya, bagian sebelum "@" bisa peka huruf besar-kecil, karena sepenuhnya di bawah kendali sistem host. Namun dalam praktiknya, tidak ada sistem email yang digunakan secara luas yang membedakan berbagai alamat berdasarkan kasus.

Bagian setelah tanda @ adalah domain dan menurut RFC 1035 , bagian 3.1,

"Server nama dan resolver harus membandingkan [domain] dengan cara case-insensitive"

Singkatnya, Anda aman untuk memperlakukan alamat email sebagai tidak sensitif huruf besar / kecil.

Mike E
sumber
81
"Singkatnya, Anda aman untuk memperlakukan alamat email sebagai tidak peka huruf besar-kecil." Saya akan ungkapan itu lebih kuat: "Anda tidak aman untuk memperlakukan alamat email sebagai case-sensitive" Terutama ketika memeriksa duplikat dalam database pengguna, dll.
Geert-Jan
61
Saya tidak setuju dengan kesimpulannya. Jika Anda mencari duplikat dalam database - ya, kecocokan huruf besar-kecil mungkin merupakan cara terbaik, tetapi saya telah melihat kode tempat alamat email dikonversi menjadi huruf kecil sebelum mengirim. Itu bukan ide yang baik, karena ada kemungkinan kecil itu tidak akan dikirimkan. Jadi cara Anda memperlakukannya tergantung pada apa konsekuensi dari kesalahan dan apa yang Anda lakukan dengan alamat email pada waktu itu (menyusun daftar alamat unik, mengirim email, dll).
Peter Bagnall
11
Adakah yang tahu daftar produk surat yang akan (a) menolak [email protected] ketika pengguna [email protected] valid, atau (b) akan memungkinkan dua kotak surat berbeda dibuat: John .Apakah @ company.com dan [email protected]?
MSC
51
Saya bekerja di sebuah perusahaan besar dan ada orang lain dengan nama depan dan belakang yang sama. Saya menemukan hari ini bahwa bagian lokalnya berbeda dari milik saya hanya dalam huruf besar. Ini telah berfungsi dengan baik, jadi saya terkejut melihat "tidak ada sistem email yang digunakan secara luas membedakan berbagai alamat berdasarkan kasus" Kami menggunakan MS Exchange yang saya sebut "banyak digunakan".
Matthew James Briggs
7
RFC 5321 2.4. Prinsip Sintaksis Umum dan Model Transaksi - Implementasi SMTP HARUS berhati-hati untuk menjaga kasus bagian-kotak surat lokal. Khususnya, untuk beberapa host, pengguna "smith" berbeda dari pengguna "Smith". Domain kotak surat mengikuti aturan DNS normal dan karenanya tidak peka huruf besar-kecil.
Adam111p
43

Saya tahu ini adalah pertanyaan lama tetapi saya hanya ingin berkomentar di sini: Sejauh mana alamat email sensitif huruf besar, sebagian besar pengguna akan "sangat tidak bijaksana" untuk secara aktif menggunakan alamat email yang membutuhkan modal. Mereka akan segera berhenti menggunakan alamat itu karena mereka kehilangan banyak surat. (Kecuali jika mereka memiliki alasan khusus untuk mempersulit, dan mereka hanya mengharapkan surat dari pengirim tertentu yang mereka kenal.)

Itu karena manusia yang tidak sempurna serta perangkat lunak yang tidak sempurna ada, (Kejutan!) Yang akan menganggap semua email adalah huruf kecil, dan untuk alasan ini manusia dan perangkat lunak ini akan mengirim pesan menggunakan "versi versi yang lebih rendah" dari alamat terlepas dari bagaimana itu diberikan ke mereka. Jika penerima tidak dapat menerima pesan seperti itu, tidak akan lama sebelum mereka melihat mereka kehilangan banyak, dan beralih ke alamat email hanya huruf kecil, atau mengatur server mereka menjadi tidak sensitif huruf besar-kecil.

PaulOTron2000
sumber
14
Ini adalah aplikasi wawasan hukum Postel en.wikipedia.org/wiki/Robustness_principle . Tetap salah untuk menulis perangkat lunak yang mengasumsikan bagian lokal dari alamat email tidak peka huruf besar-kecil, tetapi ya, mengingat ada banyak perangkat lunak yang salah di luar sana, juga kurang kuat untuk memerlukan sensitivitas huruf besar jika Anda yang menerima surat .
zigg
1
Salah satu hal yang paling membuat saya frustrasi adalah situs-situs yang memaksa saya untuk menulis email saya dalam huruf kecil semua. Baru saja mengeluarkan komentar marah kepada Twitch.tv tentang hal itu sehubungan dengan situs dukungan mereka. Mereka memblokir Anda dari bahkan memasukkan huruf besar di situs mereka. Jadi, sementara saya tahu server email saya memperlakukan mereka sebagai case-insensitive, dan saya tahu RFC menyatakan itu case-sensitive, situs harus TIDAK PERNAH membuat asumsi dengan cara apa pun dan hanya harus melewati apa yang dimasukkan pengguna. PRIA yang sangat menyebalkan !!!
Mark A. Donohoe
Secara pribadi, ketika saya mengetik email di suatu tempat, saya lebih suka menggunakan case campuran agar lebih terbaca. Sebagai contoh: [email protected] (Bukan alamat saya yang sebenarnya.) Saya melakukan ini walaupun saya mendapatkan email tanpa modal.
PaulOTron2000
Namun, sebagai pembuat perangkat lunak, Anda lebih suka layanan Anda menjadi salah satu dari sedikit orang yang melakukan hal yang benar untuk orang ini dengan email peka huruf besar-kecil.
Klesun
31

Jauh terlambat ke posting ini, tapi aku punya sesuatu yang sedikit berbeda untuk dikatakan ...

>> "Are email addresses case sensitive?"

Baiklah, "Itu Tergantung ..." (TM)

Beberapa organisasi sebenarnya berpikir itu adalah ide yang bagus dan server email mereka memberlakukan sensitivitas kasus.

Jadi, untuk tempat-tempat gila itu, "Ya, Email sensitif terhadap huruf besar-kecil."

Catatan: Hanya karena spesifikasi mengatakan Anda dapat melakukan sesuatu tidak berarti itu ide yang baik untuk melakukannya.

Prinsip KISS menunjukkan bahwa sistem kami menggunakan email yang tidak sensitif terhadap huruf besar-kecil.

Sedangkan prinsip Robustness menyarankan agar kami menerima email sensitif huruf.

Larutan:

  • Simpan email dengan sensitivitas case
  • Kirim email dengan sensitivitas case
  • Lakukan pencarian internal dengan ketidakpekaan huruf

Ini berarti bahwa jika email ini sudah ada: [email protected]

... dan pengguna lain datang dan ingin menggunakan email ini: [email protected]

... bahwa logika pencarian case-sensitive kami akan mengembalikan pesan kesalahan "Bahwa email sudah ada".

Sekarang, Anda harus membuat keputusan: Apakah solusi itu memadai untuk kasus Anda?

Jika tidak, Anda dapat membebankan biaya kenyamanan kepada klien yang meminta dukungan untuk email case sensitif mereka dan menerapkan logika khusus yang memungkinkan [email protected] ke dalam sistem Anda, bahkan jika [email protected] sudah ada.

Dalam hal ini logika pencarian / validasi email Anda mungkin terlihat seperti sesuatu pseudocode ini:

if (user.paidEmailFee) {
   // case sensitive email
   query = "select * from users where email LIKE ' + user.email + '"
} else {
   // case insensitive email
   query = "select * from users where email ILIKE ' + user.email + '"
}

Dengan cara ini, Anda sebagian besar menegakkan kepekaan kasus tetapi memungkinkan pelanggan membayar untuk dukungan ini jika mereka menggunakan sistem email yang mendukung omong kosong seperti itu.

ps ILIKE adalah kata kunci PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html

l3x
sumber
8
LIKE / ILIKE untuk pertandingan yang tepat adalah ide yang buruk. Bayangkan sebuah email berisi %atau lebih mungkin_
ThiefMaster
18
Poin Anda sangat bagus! Tapi injeksi sql dalam contoh Anda jenis reruntuhan itu :(
epelc
6
@epelc INI. Tidak bisa lebih setuju. Bangunan permintaan semacam itu seharusnya tidak ditulis di mana pun, meskipun itu hanya contoh.
xDaizu
1
@ l3x, sementara saya tidak sekuat terhadap contoh kode di atas seperti yang lain, khususnya karena Anda memang menyebutnya sebagai pseudocode dan itu hanya untuk tujuan ilustrasi, mungkin semua komentar di atas dapat diatasi dengan mengganti query = ...baris Anda dengan query = // Insert case-sensitive/insensitive search herekomentar sederhana seperti itu menjauhkan percakapan dari topik injeksi SQL dan berfokus pada apa yang Anda coba tampilkan. Dengan kata lain, simpan di logika, bukan implementasinya. Itu akan membungkam kritik.
Mark A. Donohoe
10

Standar Terbuka IETF RFC 5321 2.4. Prinsip Sintaksis Umum dan Model Transaksi

Implementasi SMTP HARUS berhati-hati untuk menjaga kasus bagian-kotak surat lokal. Khususnya, untuk beberapa host, pengguna "smith" berbeda dari pengguna "Smith".

Domain kotak surat mengikuti aturan DNS normal dan karenanya tidak peka huruf besar-kecil

Adam111p
sumber
3

Per @ l3x, itu tergantung.

Jelas ada dua set situasi umum di mana jawaban yang benar dapat berbeda, bersama dengan yang ketiga yang tidak umum:

a) Anda adalah pengguna yang mengirim surat pribadi :

Sangat sedikit sistem email modern yang menerapkan sensitivitas huruf besar, jadi Anda mungkin baik-baik saja untuk mengabaikan huruf besar-kecil dan memilih huruf apa saja yang ingin Anda gunakan. Tidak ada jaminan bahwa semua surat Anda akan terkirim - tetapi begitu sedikit surat akan terpengaruh secara negatif sehingga Anda tidak perlu khawatir.

b) Anda sedang mengembangkan perangkat lunak surat :

Lihat kutipan RFC5321 2.4 di bagian bawah.

Saat Anda sedang mengembangkan perangkat lunak surat, Anda ingin menjadi yang sesuai dengan RFC. Anda dapat membuat case alamat email pengguna Anda sendiri tidak sensitif jika Anda mau (dan Anda harus melakukannya). Tetapi agar sesuai dengan RFC, Anda HARUS memperlakukan alamat luar sebagai case-sensitive .

c) Mengelola daftar alamat email milik bisnis sebagai karyawan :

Ada kemungkinan bahwa penerima email yang sama ditambahkan ke daftar lebih dari sekali - tetapi menggunakan kasus yang berbeda. Dalam situasi ini meskipun alamatnya berbeda secara teknis, itu mungkin mengakibatkan penerima menerima email duplikat. Cara Anda menangani situasi ini mirip dengan situasi a) karena Anda mungkin diperlakukan sebagai duplikat dan menghapus entri duplikat. Akan tetapi, lebih baik memperlakukan ini sebagai kasus khusus, dengan mengirim email "pengingat" ke kedua alamat untuk menanyakan apakah keduanya merupakan duplikat satu sama lain dan, jika demikian, alamat email mana yang diinginkan oleh penerima yang akan Anda gunakan.

Dari sudut pandang hukum, jika Anda menghapus duplikat tanpa pengakuan / izin dari kedua alamat, Anda dapat bertanggung jawab untuk membocorkan informasi pribadi / otentikasi ke alamat yang tidak sah hanya karena dua penerima sebenarnya terpisah memiliki alamat yang sama dengan kasus yang berbeda .

Kutipan dari RFC5321 2.4:

Bagian lokal dari kotak surat HARUS diperlakukan sebagai case sensitive. Oleh karena itu, implementasi SMTP HARUS berhati-hati untuk menjaga kasus bagian kotak surat lokal. Khususnya, untuk beberapa host, pengguna "smith" berbeda dari pengguna "Smith". Namun, mengeksploitasi sensitivitas case bagian lokal kotak surat menghambat interoperabilitas dan tidak dianjurkan.

zTricky
sumber