Saya tidak bertanya tentang validasi email lengkap.
Saya hanya ingin tahu karakter apa saja yang diperbolehkan user-name
dan server
bagian dari alamat email. Ini mungkin terlalu disederhanakan, mungkin alamat email dapat mengambil bentuk lain, tapi saya tidak peduli. Saya hanya bertanya tentang formulir sederhana ini: user-name@server
(mis. [email protected]) dan karakter yang diizinkan di kedua bagian.
forms
email
email-validation
email-address
WildWezyr
sumber
sumber
+
diperbolehkan. Ini membuat saya gila ketika situs web tidak mengizinkannya karena email saya ada+
di dalamnya dan begitu banyak situs tidak mengizinkannya."hello world"@example.com
adalah benar.Jawaban:
Lihat RFC 5322: Format Pesan Internet dan, pada tingkat lebih rendah, RFC 5321: Protokol Transfer Surat Sederhana .
RFC 822 juga mencakup alamat email, tetapi sebagian besar berhubungan dengan strukturnya:
Dan seperti biasa, Wikipedia memiliki artikel yang layak tentang alamat email :
Selain karakter ASCII, pada 2012 Anda dapat menggunakan karakter internasional di atas
U+007F
, dikodekan sebagai UTF-8 seperti yang dijelaskan dalam spesifikasi RFC 6532 dan dijelaskan di Wikipedia . Perhatikan bahwa pada 2019, standar-standar ini masih ditandai sebagai Usulan, tetapi sedang diluncurkan perlahan. Perubahan dalam spesifikasi ini pada dasarnya menambahkan karakter internasional sebagai karakter alfanumerik yang valid (atext) tanpa mempengaruhi aturan tentang karakter khusus yang diizinkan & dibatasi seperti!#
dan@:
.Untuk validasi, lihat Menggunakan ekspresi reguler untuk memvalidasi alamat email .
Bagian
domain
tersebut didefinisikan sebagai berikut :sumber
[email protected]
bukan alamat email yang valid, tetapi[email protected]
, meskipun keduanya menggunakan karakter yang sama.Awas! Ada banyak pengetahuan yang membusuk di utas ini (hal-hal yang dulu benar dan sekarang tidak).
Untuk menghindari penolakan positif palsu terhadap alamat email aktual di dunia saat ini dan masa depan, dan dari mana saja di dunia, Anda perlu tahu setidaknya konsep tingkat tinggi RFC 3490 , "Menginternasionalkan Nama Domain dalam Aplikasi (IDNA)". Saya tahu orang-orang di AS dan A sering tidak memahami hal ini, tetapi sudah digunakan secara luas dan meningkat pesat di seluruh dunia (terutama bagian yang didominasi non-Inggris).
Intinya adalah bahwa Anda sekarang dapat menggunakan alamat seperti mason @ 日本 .com dan wildwezyr@fahrvergnügen.net. Tidak, ini belum kompatibel dengan semua yang ada di luar sana (seperti yang banyak disesalkan di atas, bahkan alamat ident + style qmail yang sederhana sering salah ditolak). Tetapi ada RFC, ada spek, sekarang didukung oleh IETF dan ICANN, dan - yang lebih penting - ada sejumlah besar dan semakin banyak implementasi yang mendukung peningkatan ini yang saat ini dalam pelayanan.
Saya sendiri tidak tahu banyak tentang perkembangan ini sampai saya pindah kembali ke Jepang dan mulai melihat alamat email seperti hei @ や る .ca dan URL Amazon seperti ini:
http://www.amazon.co.jp/ エ レ ク ト ロ ニ ク ス - デ ジ タ ル メ ラ - ポ ー ー ブ ル b b / b / ref = topnav_storetab_e? yaitu = UTF8 & simpul = 3210981
Saya tahu Anda tidak ingin tautan ke spesifikasi, tetapi jika Anda hanya mengandalkan pengetahuan peretas yang sudah ketinggalan zaman di forum Internet, validator email Anda pada akhirnya akan menolak alamat email yang semakin diharapkan pengguna yang tidak berbahasa Inggris untuk bekerja. Bagi para pengguna itu, validasi seperti itu akan sama menjengkelkannya dengan bentuk mati-otak yang biasa yang kita semua benci, yang tidak dapat menangani + atau nama domain tiga bagian atau apa pun.
Jadi saya tidak mengatakan itu tidak merepotkan, tetapi daftar lengkap karakter "diizinkan dalam beberapa kondisi / / tidak ada kondisi" adalah (hampir) semua karakter dalam semua bahasa. Jika Anda ingin "menerima semua alamat email yang valid (dan banyak juga yang tidak valid)" maka Anda harus mempertimbangkan IDN, yang pada dasarnya membuat pendekatan berbasis karakter menjadi tidak berguna (maaf), kecuali Anda terlebih dahulu mengubah alamat email yang diinternasionalisasikan ke Punycode .
Setelah melakukan itu, Anda dapat mengikuti (sebagian besar) saran di atas.
sumber
Format alamat email adalah:
local-part@domain-part
(maks. 64 @ 255 karakter, tidak lebih 256 total).The
local-part
dandomain-part
bisa memiliki set yang berbeda dari karakter yang diizinkan, tapi itu tidak semua, karena ada aturan lebih untuk itu.Secara umum, bagian lokal dapat memiliki karakter ASCII ini:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,!#$%&'*+-/=?^_`{|}~
,.
(bukan karakter pertama atau terakhir atau diulang kecuali dikutip),"(),:;<>@[\]
(dengan beberapa batasan),()
(diizinkan di dalam tanda kurung, mis(comment)[email protected]
.).Bagian domain:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,-
(bukan karakter pertama atau terakhir),jsmith@[192.168.2.1]
ataujsmith@[IPv6:2001:db8::1]
.Alamat email ini valid:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(bagian lokal satu huruf)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
[email protected]
admin@mailserver1
(nama domain lokal tanpa domain tingkat atas)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(spasi antara tanda kutip)example@localhost
(dikirim dari localhost)[email protected]
(lihat Daftar domain tingkat atas Internet )user@com
user@localserver
user@[IPv6:2001:db8::1]
Dan contoh-contoh tidak valid ini:
Abc.example.com
(tidak ada@
karakter)A@b@[email protected]
(hanya satu@
yang diizinkan di luar tanda kutip)a"b(c)d,e:f;gi[j\k][email protected]
(tidak ada karakter khusus di bagian lokal ini yang diizinkan di luar tanda kutip)just"not"[email protected]
(string yang dikutip harus dipisahkan dengan titik atau satu-satunya elemen yang membentuk bagian lokal)this is"not\[email protected]
(spasi, kutipan, dan garis miring terbalik mungkin hanya ada ketika dalam string yang dikutip dan didahului oleh garis miring terbalik)this\ still\"not\[email protected]
(bahkan jika lolos (didahului dengan garis miring terbalik), spasi, tanda kutip, dan garis miring terbalik masih harus diisi dengan tanda kutip)[email protected]
(titik ganda sebelumnya@
); (dengan peringatan: Gmail membiarkan ini lewat)[email protected]
(titik ganda setelah@
)Sumber: Alamat email di Wikipedia
Regex RFC2822 Perl untuk memvalidasi email:
Lihat juga: Parser Alamat Email RFC 822 dalam PHP .
Definisi resmi dari alamat email ada di:
Terkait:
sumber
[email protected]
dan menyebutnya sehari.Wikipedia memiliki artikel bagus tentang ini , dan spek resmi ada di sini . Dari Wikipdia:
sumber
Google melakukan hal yang menarik dengan alamat gmail.com mereka. alamat gmail.com hanya mengizinkan huruf (az), angka, dan titik (yang diabaikan).
misalnya, [email protected] sama dengan [email protected], dan kedua alamat email akan dikirim ke kotak surat yang sama. [email protected] juga dikirimkan ke kotak surat yang sama.
Jadi untuk menjawab pertanyaan, terkadang tergantung pada pelaksana pada seberapa banyak standar RFC yang ingin mereka ikuti. Gaya alamat gmail.com Google kompatibel dengan standar. Mereka melakukannya dengan cara itu untuk menghindari kebingungan di mana orang yang berbeda akan mengambil alamat email yang sama misalnya
Tautan wikipedia adalah referensi yang bagus tentang apa yang umumnya dibolehkan oleh alamat email. http://en.wikipedia.org/wiki/Email_address
sumber
{john'doe}@my.server
tanpa masalah. Diuji dengan server hMail juga.{piotr'kula}@kula.solutions
- Jika berhasil, Anda akan mendapatkan balasan otomatis yang bagus dari itu. Kalau tidak, tidak akan terjadi apa-apa.Anda bisa mulai dari artikel wikipedia :
sumber
Nama:
Server:
sumber
<>
dan[]
? Misalnya"()<>[]:,;@\\\"!#$%&'-/=?^_
{} | ~ .a "@ example.org`?Periksa @ dan. dan kemudian mengirim email untuk mereka verifikasi.
Saya masih tidak dapat menggunakan alamat email .name saya di 20% dari situs di internet karena seseorang mengacaukan validasi email mereka, atau karena itu mendahului alamat baru yang valid.
sumber
Jawaban singkatnya adalah ada 2 jawaban. Ada satu standar untuk apa yang harus Anda lakukan. yaitu perilaku yang bijaksana dan akan membuat Anda keluar dari masalah. Ada standar lain (jauh lebih luas) untuk perilaku yang harus Anda terima tanpa membuat masalah. Dualitas ini berfungsi untuk mengirim dan menerima email tetapi memiliki aplikasi luas dalam kehidupan.
Untuk panduan yang baik untuk alamat yang Anda buat; lihat: http://www.remote.org/jochen/mail/info/chars.html
Untuk memfilter email yang valid, sampaikan saja sesuatu yang cukup dapat dipahami untuk melihat langkah selanjutnya. Atau mulai membaca banyak RFC, hati-hati, ini naga.
sumber
Bacaan yang bagus tentang masalah ini .
Kutipan:
sumber
Joe.\\[email protected]
tanpa tanda kutip. Apakah ini benar-benar valid? Tampaknya tidak jelas diberikan jawaban di sini, tapi saya bertanya karena saya telah melihat (sangat jarang) kasus string email DNS SoA rname yang berisi backslash.Jawaban yang diterima merujuk pada artikel Wikipedia ketika membahas bagian lokal yang valid dari alamat email, tetapi Wikipedia tidak berwenang atas hal ini.
IETF RFC 3696 adalah otoritas mengenai masalah ini, dan harus dikonsultasikan pada bagian 3. Pembatasan pada alamat email pada halaman 5:
Seperti yang dilakukan orang lain, saya mengirimkan regex yang berfungsi untuk PHP dan JavaScript untuk memvalidasi alamat email:
sumber
Seperti dapat ditemukan di tautan Wikipedia ini
sumber
Jawabannya adalah (hampir)
ALL
(ASCII 7-bit).Jika aturan penyertaan adalah "... diizinkan dalam kondisi / ada / tidak ada ..."
Hanya dengan melihat salah satu dari beberapa aturan inklusi yang memungkinkan untuk teks yang diperbolehkan di bagian "teks domain" di RFC 5322 di bagian atas halaman 17 kita menemukan:
hanya tiga karakter yang hilang dalam uraian ini yang digunakan dalam domain-literal
[]
, untuk membentuk pasangan yang dikutip\
, dan karakter spasi putih(% d32). Dengan itu seluruh rentang 32-126 (desimal) digunakan. Persyaratan serupa muncul sebagai "qtext" dan "ctext". Banyak karakter kontrol juga diperbolehkan / digunakan. Satu daftar karakter kontrol tersebut muncul di halaman 31 bagian 4.1 dari RFC 5322 sebagai obs-NO-WS-CTL.
Semua karakter kontrol ini diizinkan seperti yang dinyatakan pada awal bagian 3.5:
Dan karena itu aturan inklusi "terlalu lebar". Atau, dalam arti lain, aturan yang diharapkan "terlalu sederhana".
sumber
Demi kesederhanaan, saya membersihkan kiriman dengan menghapus semua teks dalam tanda kutip ganda dan yang terkait dengan tanda kutip ganda sebelum validasi, menempatkan kibosh pada pengiriman alamat email berdasarkan apa yang dilarang. Hanya karena seseorang dapat memiliki John .. "Alamat * $ hizzle * Bizzle" .. Doe@wh whatever.com tidak berarti saya harus mengizinkannya di sistem saya. Kita hidup di masa depan di mana mungkin membutuhkan waktu lebih sedikit untuk mendapatkan alamat email gratis daripada melakukan pekerjaan dengan baik menyeka pantat Anda. Dan tidak seperti kriteria email tidak diplester tepat di sebelah input yang mengatakan apa yang boleh dan tidak boleh.
Saya juga membersihkan apa yang secara khusus tidak diizinkan oleh berbagai RFC setelah materi yang dikutip dihapus. Daftar karakter dan pola yang secara khusus tidak diizinkan tampaknya merupakan daftar yang jauh lebih pendek untuk diuji.
Dilarang:
Dalam contoh yang diberikan:
Mengirim pesan email konfirmasi ke hasil sisa setelah upaya untuk menambah atau mengubah alamat email adalah cara yang baik untuk melihat apakah kode Anda dapat menangani alamat email yang dikirimkan. Jika email lolos validasi setelah putaran sanitasi sebanyak yang diperlukan, maka matikan konfirmasi itu. Jika suatu permintaan kembali dari tautan konfirmasi, maka email baru dapat dipindahkan dari status penyembuh || sementara || penyimpanan atau penyimpanan untuk menjadi email tersimpan kelas bonafide yang nyata.
Pemberitahuan kegagalan atau keberhasilan perubahan alamat email dapat dikirim ke alamat email lama jika Anda ingin mempertimbangkan. Penyiapan akun yang tidak dikonfirmasi mungkin keluar dari sistem karena upaya yang gagal seluruhnya setelah jangka waktu yang wajar.
Saya tidak memperbolehkan email yang tidak diinginkan di sistem saya, mungkin itu hanya membuang uang. Tetapi, 99,9% dari waktu orang hanya melakukan hal yang benar dan memiliki email yang tidak mendorong batas kesesuaian dengan jurang menggunakan skenario kompatibilitas kasus tepi. Hati-hati dengan regex DDoS, ini adalah tempat di mana Anda bisa mendapat masalah. Dan ini terkait dengan hal ketiga yang saya lakukan, saya membatasi berapa lama saya mau memproses satu email. Jika perlu memperlambat mesin saya untuk mendapatkan validasi - itu tidak melewati logika endpoint API data yang masuk saya.
Sunting: Jawaban ini terus mendapatkan dinged karena "buruk", dan mungkin layak mendapatkannya. Mungkin itu masih buruk, mungkin tidak.
sumber
Di PHP saya, saya menggunakan cek ini
coba sendiri http://phpfiddle.org/main/code/9av6-d10r
sumber
Saya membuat regex ini sesuai dengan pedoman RFC:
sumber
Gmail hanya akan mengizinkan tanda + sebagai karakter khusus dan dalam beberapa kasus (.) Tetapi karakter khusus lainnya tidak diizinkan di Gmail. RFC's mengatakan bahwa Anda dapat menggunakan karakter khusus tetapi Anda harus menghindari mengirim email ke Gmail dengan karakter khusus.
sumber