Saya telah menemukan kode PHP ini untuk memeriksa alamat email menggunakan SMTP tanpa mengirim email .
Adakah yang mencoba sesuatu yang serupa atau apakah itu berhasil untuk Anda? Dapatkah Anda mengetahui apakah email yang dimasukkan pelanggan / pengguna benar & ada?
Jawaban:
Ada dua metode yang terkadang dapat Anda gunakan untuk menentukan apakah penerima benar-benar ada:
Anda dapat terhubung ke server, dan mengeluarkan
VRFY
perintah. Sangat sedikit server yang mendukung perintah ini, tetapi memang ditujukan untuk hal ini. Jika server merespons dengan DSN 2.0.0, pengguna tersebut ada.Anda dapat mengeluarkan
RCPT
, dan melihat apakah surat tersebut ditolak.Jika pengguna tidak ada, Anda akan mendapatkan DSN 5.1.1. Namun, hanya karena email tersebut tidak ditolak, tidak berarti pengguna tersebut ada. Beberapa server diam-diam akan membuang permintaan seperti ini untuk mencegah pencacahan pengguna mereka. Server lain tidak dapat memverifikasi pengguna dan harus menerima pesan tersebut.
Ada juga teknik antispam yang disebut greylisting, yang akan menyebabkan server menolak alamat pada awalnya, mengharapkan server SMTP yang sebenarnya akan mencoba mengirim ulang beberapa waktu kemudian. Ini akan mengacaukan upaya untuk memvalidasi alamat.
Sejujurnya, jika Anda mencoba untuk memvalidasi alamat, pendekatan terbaik adalah dengan menggunakan regex sederhana untuk memblokir alamat yang jelas tidak valid, dan kemudian mengirim email yang sebenarnya dengan link kembali ke sistem Anda yang akan memvalidasi email yang diterima. Ini juga memastikan bahwa pengguna mereka memasukkan email mereka yang sebenarnya, bukan kesalahan ketik kecil yang terjadi pada orang lain.
sumber
Jawaban lain di sini membahas berbagai masalah dengan mencoba melakukan ini. Saya pikir saya akan menunjukkan bagaimana Anda dapat mencoba ini jika Anda ingin belajar dengan melakukannya sendiri.
Anda dapat terhubung ke server email melalui telnet untuk menanyakan apakah ada alamat email. Berikut adalah contoh pengujian alamat email untuk
stackoverflow.com
:Garis yang diawali dengan kode numerik adalah tanggapan dari server SMTP. Saya menambahkan beberapa baris kosong agar lebih mudah dibaca.
Banyak server email tidak akan mengembalikan informasi ini sebagai cara untuk mencegah perampasan alamat email oleh pelaku spam, jadi Anda tidak dapat mengandalkan teknik ini. Namun, Anda mungkin berhasil membersihkan beberapa alamat email yang jelas buruk dengan mendeteksi server email yang tidak valid, atau alamat penerima ditolak seperti di atas.
Perhatikan juga bahwa server email dapat memasukkan Anda ke daftar hitam jika Anda membuat terlalu banyak permintaan.
Di PHP saya yakin Anda dapat menggunakan
fsockopen
,fwrite
danfread
untuk melakukan langkah-langkah di atas secara terprogram:sumber
Jawaban umumnya adalah Anda tidak dapat memeriksa apakah ada peristiwa alamat email jika Anda mengirim email ke sana: itu bisa saja masuk ke lubang hitam.
Dengan demikian metode yang dijelaskan di sana cukup efektif. Ini digunakan dalam kode produksi di ZoneCheck kecuali bahwa ia menggunakan RSET, bukan QUIT.
Di mana interaksi pengguna dengan kotak suratnya tidak terlalu mahal, banyak situs yang benar-benar menguji bahwa surat itu tiba di suatu tempat dengan mengirimkan nomor rahasia yang harus dikirim kembali ke emitor (baik dengan membuka URL rahasia atau mengirim kembali nomor rahasia ini melalui email). Kebanyakan milis bekerja seperti itu.
sumber
Tidak juga ..... Beberapa server mungkin tidak memeriksa "rcpt to:"
http://www.freesoft.org/CIE/RFC/1123/92.htm
Melakukannya adalah risiko keamanan .....
Jika server melakukannya, Anda dapat menulis bot untuk menemukan setiap alamat di server ....
sumber
Ini akan gagal (di antara kasus lain) ketika server email target menggunakan daftar abu-abu.
Daftar abu-abu : Server SMTP menolak pengiriman pertama kali klien yang sebelumnya tidak dikenal terhubung, memungkinkan waktu berikutnya; hal ini membuat beberapa persentase spambots keluar, sementara memungkinkan penggunaan yang sah - seperti yang diharapkan bahwa pengirim email yang sah akan mencoba lagi , yang akan dilakukan oleh agen transfer email biasa.
Namun, jika kode Anda hanya memeriksa server sekali , server dengan daftar abu-abu akan menolak pengiriman (karena klien Anda terhubung untuk pertama kali); kecuali jika Anda memeriksanya lagi dalam beberapa saat, Anda mungkin salah menolak alamat email yang valid.
sumber
Beberapa isu:
Untuk beberapa server SMTP (seperti gmail), Anda perlu menggunakan SSL untuk melakukan apa pun.Ini hanya berlaku jika menggunakan server SMTP Gmail untuk mengirim email.sumber
Meskipun pertanyaan ini agak lama, tip layanan ini dapat membantu pengguna yang mencari solusi serupa untuk memeriksa alamat email di luar validasi sintaks sebelum mengirim.
Saya telah menggunakan layanan sumber terbuka ini untuk memvalidasi email yang lebih mendalam (memeriksa catatan mx di domain alamat email, dll.) Untuk beberapa proyek dengan hasil yang baik. Ini juga memeriksa penyihir kesalahan ketik umum yang cukup berguna. Demo di sini .
sumber
"Dapatkah Anda mengetahui apakah email yang dimasukkan pelanggan / pengguna benar & ada?"
Sebenarnya ini adalah dua hal yang berbeda. Ini mungkin ada tetapi mungkin tidak benar.
Terkadang Anda harus mengambil input pengguna pada nilai nominalnya. Ada banyak cara untuk mengalahkan sistem jika tidak.
sumber
Tentang semua yang dapat Anda lakukan adalah mencari DNS dan memastikan domain yang ada di alamat email memiliki catatan MX, selain itu tidak ada cara yang dapat diandalkan untuk menangani ini.
Beberapa server mungkin bekerja dengan metode rcpt-to di mana Anda berbicara dengan server SMTP, tetapi itu sepenuhnya bergantung pada konfigurasi server. Masalah lain mungkin server yang kelebihan beban dapat mengembalikan kode 550 yang mengatakan pengguna tidak diketahui, tetapi ini adalah kesalahan sementara, ada kesalahan permanen (menurut saya 451?) Yang dapat dikembalikan. Ini sepenuhnya bergantung pada konfigurasi server.
Saya pribadi akan memeriksa data MX DNS, kemudian mengirim verifikasi email jika data MX tersebut ada.
sumber
sumber
getmxrr
Dengan asumsi itu adalah alamat pengguna , beberapa server email mengizinkan perintah SMTP VRFY untuk benar-benar memverifikasi alamat email tersebut terhadap kotak suratnya. Sebagian besar situs utama tidak akan memberi Anda banyak informasi; tanggapan gmail adalah "jika Anda mencoba mengirimkannya, kami akan mencoba mengirimkannya" atau sesuatu yang pintar seperti itu.
sumber
Saya pikir Anda tidak bisa, ada begitu banyak skenario di mana bahkan pengiriman email bisa gagal. Misalnya. server email di sisi pengguna untuk sementara tidak aktif, kotak surat ada tetapi penuh sehingga pesan tidak dapat dikirim, dll.
Itu mungkin mengapa begitu banyak situs memvalidasi pendaftaran setelah pengguna mengonfirmasi bahwa mereka telah menerima email konfirmasi.
sumber
Saya dapat memastikan jawaban Joseph dan Drew untuk digunakan
RCTP TO: <address_to_check>
. Saya ingin menambahkan sedikit tambahan di atas jawaban tersebut.Penyedia layanan umum
Beberapa penyedia email menerapkan kebijakan penampung-semua, artinya
*@mydomain.com
akan mengembalikanRCTP TO:
perintah positif . Tetapi ini tidak berarti bahwa kotak surat "ada", seperti dalam "milik manusia". Tidak banyak yang bisa dilakukan di sini, waspadalah.IP Greylisting / Blacklisting
Daftar abu-abu: Sambungan pertama dari IP yang tidak dikenal diblokir. Solusi: coba lagi setidaknya 2 kali.
Daftar Hitam: jika Anda mengirim terlalu banyak permintaan dari IP yang sama, IP ini diblokir. Solusi: gunakan rotasi IP; Reacher menggunakan Tor.
Permintaan HTTP pada formulir pendaftaran
Ini sangat khusus untuk penyedia, tetapi terkadang Anda dapat menggunakan permintaan HTTP yang dibuat dengan baik, dan mengurai respons permintaan ini untuk melihat apakah nama pengguna sudah terdaftar atau belum dengan penyedia ini.
Berikut adalah fungsi yang relevan dari pustaka sumber terbuka yang saya tulis untuk memeriksa
*@yahoo.com
alamat menggunakan permintaan HTTP: check-if-email-existing . Saya tahu kode saya Rust dan utas ini diberi tag PHP, tetapi ide yang sama berlaku.Kotak Masuk Penuh
Ini mungkin kasus tepi, tetapi ketika pengguna memiliki kotak masuk penuh,
RCTP TO:
akan mengembalikan5.1.1 DSN
pesan kesalahan yang mengatakan itu penuh. Artinya akun tersebut benar-benar ada!Penyingkapan
Saya menjalankan Reacher , API verifikasi email waktu nyata. Kode saya ditulis dalam Rust, dan 100% open-source. Lihat jika Anda menginginkan solusi yang lebih kuat:
Github: https://github.com/amaurymartiny/check-if-email-exists
Dengan kombinasi berbagai teknik untuk melewati rintangan, saya berhasil memverifikasi sekitar 80% email yang diperiksa pelanggan saya.
sumber
sumber