Kata pengantar
Saya percaya semua orang harus tahu bahwa API Open Umum menelepon kami akan memiliki nilai pengembalian atau kode status untuk memberi tahu kami apakah eksekusi berhasil atau tidak. Namun, Javamail tidak memberikan nilai pengembalian seperti itu.
Oleh karena itu, ketika menelepon Javamail untuk mengirim email, kami hanya dapat menggunakan pengecualian tangkapan untuk menentukan apakah email tersebut berhasil dikirim. Kami percaya bahwa selama tidak ada pengecualian, email akan berhasil dikirim. Lalu mari kita analisis mengapa Javamail tidak memberikan nilai pengembalian, dan apakah status pengiriman email yang berhasil dapat diandalkan melalui pengecualian.
Javamail Mengirim Prinsip Surat
Saat mengirim surat menggunakan Javamail, kami harus menyediakan sesi surat. Proses membuat sesi email adalah sebagai berikut:
Properti props = properti baru (); // IP dan port server yang mengirim surat props.put ("mail.smtp.host", mail_smtp_host); props.put ("mail.smtp.port", mail_smtp_port); // apakah otentikasi diperlukan props.put ("mail.smtp.auth", "true"); props.put ("mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketfactory"); Session session = session.getDefaultInstance (props, new Authenticator () {Protected PasswordAuthentication getPasswordAuthentication () {// Masuk ke nama pengguna dan kata sandi dari email yang mengirim server yang baru kembali (mail_sender_mail, mail_sender_pass);}}});Menganalisis kode.
Sebelum membuat sesi, pertama -tama kami membuat properti. Properti ini menetapkan parameter berikut: mail.smtp.host , mail.smtp.port , mail.smtp.auth dan mail.smtp.socketFactory.class . Saat membuat sesi, Anda juga harus melewati nama pengguna dan kata sandi untuk mengirim email.
Kode email pengiriman adalah sebagai berikut:
// 5 langkah untuk mengirim email menggunakan Javamail // 1. Buat sesi sesi sesi sesi = session.getInstance (prop); // Aktifkan Mode Debug Sesi, sehingga Anda dapat melihat status yang dijalankan dari email yang dikirim oleh Program Sesi.setDebug (true); // 2. Dapatkan objek transportasi melalui Sesi Transport TS = session.getTransport (); // 3. Gunakan nama pengguna dan kata sandi email untuk terhubung ke server surat. Saat mengirim email, pengirim perlu mengirimkan nama pengguna dan kata sandi email ke server SMTP. Nama pengguna dan kata sandi dapat diverifikasi sebelum email dapat dikirim ke penerima secara normal. ts.connect ("smtp.sohu.com", "gacl", "email kata sandi"); // 4. Buat pesan pesan pesan = createSimplemail (sesi); // 5. Kirim mail ts.sendMessage (pesan, message.getAllrecipients ()); // tutup koneksi ts.close ();Ringkasan proses pengiriman email memiliki langkah -langkah berikut:
1. Buat objek sesi yang berisi tautan jaringan ke server email
2. Buat objek pesan yang mewakili konten email
3. Buat Objek Transportasi
4. Tautan ke server
5. Kirim pesan
6. Tutup tautannya
Karena transportasi hanyalah kelas abstrak, metode ts.sendMessage sebenarnya adalah metode sendMessage dari kelas implementasi SMTPTransport SMTPTransport .
Metode sendMessage dari SMTPTransport bergantung pada protokol SMTP untuk mengirim email.
Oleh karena itu, ketika Javamail menggunakan layanan SMTP untuk mengirim email, ketika Anda mengirim email ke server SMTP, Anda hanya bisa mendapatkan status yang telah dikirim ke antrian SMTP, tetapi Anda tidak bisa mendapatkannya apakah server email dapat mengirimkannya dengan sukses. Dengan kata lain, Anda tidak dapat menjamin bahwa email akan berhasil dikirim. Ini tergantung pada transmisi konten dari protokol SMTP.
Namun, jika protokol SMTP gagal, kesalahan akan dilaporkan. Layanan transmisi data yang andal SMTP yang disediakan oleh TCP mengirimkan pesan surat dari server surat pengirim ke server surat penerima.
Jadi kami dapat berpikir bahwa ketika kami menelepon Javamail untuk mengirim email, jika program tidak melaporkan kesalahan, itu berarti bahwa email tersebut berhasil dikirim.
Mekanisme kerja SMTP
SMTP biasanya memiliki dua mode kerja: mengirim SMTP dan menerima SMTP.
Metode kerja spesifik adalah: Setelah menerima permintaan email pengguna, itu menentukan apakah email tersebut adalah email lokal. Jika dikirim langsung ke email pengguna, jika tidak, query catatan MX dari server surat jarak jauh dari DNS, dan buat saluran transmisi dua arah dengan SMTP penerima jarak jauh. Setelah itu, perintah SMTP dikirim oleh SMTP pengiriman, diterima oleh SMTP penerima, dan respons ditransmisikan ke arah yang berlawanan. Setelah saluran transmisi ditetapkan, pengirim SMTP mengirim perintah surat untuk menunjukkan pengirim surat. Jika penerima SMTP dapat menerima surat, jawaban OK akan dikembalikan. Pengirim SMTP kemudian mengeluarkan perintah RCPT untuk mengonfirmasi apakah email telah diterima. Jika penerima SMTP menerimanya, ia mengembalikan jawaban yang baik; Jika tidak dapat diterima, ia mengirimkan respons penolakan (tetapi tidak membatalkan seluruh operasi email), dan kedua belah pihak akan mengulangi ini berkali -kali. Ketika penerima menerima semua email, urutan khusus akan diterima. Jika penerima berhasil memproses email, itu akan mengembalikan balasan OK.
Proses kerja SMTP
Simple Mail Transfer Protocol (SMTP) adalah protokol transmisi email berbasis teks yang digunakan di internet untuk bertukar surat antar server surat. SMTP adalah layanan tingkat aplikasi yang dapat disesuaikan dengan berbagai sistem jaringan.
Perintah dan respons SMTP semuanya didasarkan pada teks, dengan unit perilaku perintah, dan garis baru adalah CR/LF. Informasi respons umumnya hanya memiliki satu baris, dimulai dengan kode 3 digit, dan deskripsi teks yang sangat singkat dapat dilampirkan nanti.
SMTP harus melalui tiga tahap: membuat koneksi, mengirimkan surat dan merilis koneksi. Secara khusus:
(1) Menetapkan koneksi TCP.
(2) Klien mengirimkan perintah HELO ke server untuk mengidentifikasi identitas pengirim sendiri, dan klien kemudian mengirimkan perintah surat.
(3) Server merespons dengan OK, menunjukkan bahwa ia siap untuk menerima.
(4) Klien mengirimkan perintah RCPT.
(5) Sisi server menunjukkan apakah bersedia menerima email untuk penerima.
(6) Akhir negosiasi, kirim email, dan gunakan data perintah untuk mengirim konten masukan.
(7) Akhiri pengiriman ini dan keluar dengan perintah QUIT.
Server SMTP merutekan email berdasarkan Mail Exchange (MX) di DNS. Saat mengirim email, server email terletak sesuai dengan sufiks alamat penerima. SMTP menyelesaikan fungsi pengeditan, pengumpulan dan membaca email melalui Agen Pengguna (UA); dan mengirimkan email ke tujuan melalui agen transfer surat (MTA).
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini akan membantu studi atau pekerjaan Anda. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.