Ringkasan
1. Standar terkait email
Program layanan javamail yang disediakan oleh produsen dapat secara selektif menerapkan protokol email tertentu, protokol surat umum meliputi:
SMTP (Protokol Transfer Simple Mail) adalah protokol transfer surat sederhana. Ini adalah seperangkat aturan untuk mengirimkan surat dari alamat sumber ke alamat tujuan. Ini mengontrol metode transit huruf.
POP3 (Protokol Kantor Pos Versi 3): Ini adalah protokol standar yang digunakan untuk menerima email.
IMAP (Internet Mail Access Protocol): Artinya, Protokol Akses Mail Internet. Ini adalah protokol alternatif untuk POP3.
Ketiga protokol ini memiliki protokol yang sesuai dengan transmisi terenkripsi SSL, yaitu SMTP, POP3 dan IMAP.
MIME (Ekstensi Surat Internet multiguna): yaitu, standar ekstensi surat internet multiguna. Ini bukan protokol transfer email. Namun, format didefinisikan untuk pesan, lampiran dan konten lain yang dikirimkan.
2. Pengantar Javamail
Javamail adalah API yang diterbitkan oleh Sun untuk menangani email. Ini tidak termasuk dalam Java SE, tetapi merupakan bagian dari Java EE.
Mail.jar: File jar ini berisi API Javamail dan SMTP yang disediakan matahari, IMAP, dan penyedia layanan POP3;
Activation.jar: File jar ini berisi implementasi JAF API dan Sun.
Kelas inti yang digunakan dalam paket Javamail untuk memproses email adalah: properti, sesi, pesan, alamat, autentikator, transportasi, toko, dll.
3. Proses transfer surat
Seperti yang ditunjukkan pada gambar di atas, langkah -langkah untuk memproses email adalah sebagai berikut:
4. Struktur Pesan
Kelas Mimemessage: mewakili seluruh email.
Kelas Mimebodypart: Pesan MIME yang mewakili pesan tersebut.
Kelas Mimemultipart: mewakili informasi mime gabungan yang terdiri dari beberapa informasi pantomim.
5. Kelas inti Javamail
Javamail menyediakan abstraksi tingkat tinggi dari mengirim dan menerima email, membentuk beberapa antarmuka dan kelas utama, yang membentuk dasar program. Mari kita lihat benda -benda paling umum ini.
6. Java.util.properties Class (Objek Properti)
Kelas java.util.properties mewakili satu set properti.
Masing -masing kunci dan nilainya dari string tipe.
Karena Javamail perlu berkomunikasi dengan server email, ini mengharuskan program untuk memberikan banyak informasi seperti alamat server, port, nama pengguna, kata sandi, dll. Javamail merangkum informasi atribut ini melalui objek Properties.
Contoh: Misalnya, kode berikut merangkum beberapa informasi atribut:
Properties prop = properti baru (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", "[email dilindungi]"); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setproperty ("mailsmt");Untuk protokol surat yang berbeda, Javamail menetapkan bahwa penyedia layanan harus mendukung serangkaian atribut.
Tabel berikut adalah beberapa atribut umum (nilai atribut ditetapkan sebagai tipe string, dan bilah jenis atribut hanya menunjukkan bagaimana atribut diuraikan):
7. Javax.Mail.Session Class (Objek Sesi)
Sesi mewakili sesi email.
Fungsi utama sesi meliputi dua aspek:
Menerima berbagai informasi atribut konfigurasi: informasi atribut yang ditetapkan melalui objek Properties;
Inisialisasi lingkungan Javamail: Inisialisasi lingkungan Javamail sesuai dengan file konfigurasi Javamail untuk membuat contoh kelas penting lainnya melalui objek sesi.
Javamail menyediakan informasi konfigurasi dasar melalui file-file berikut di direktori meta-INF dari paket JAR sehingga sesi dapat memuat kelas implementasi penyedia sesuai dengan file konfigurasi ini:
javamail.default.providers;
javamail.default.address.map.
contoh:
Properti props = properti baru (); props.setProperty ("mail.transport.protocol", "smtp"); session session = session.getInstance (props);8. Javax.Mail.Transport Class (Transfer Surat)
Hanya ada dua cara untuk menangani operasi email: mengirim atau menerima.
Javamail menggambarkan dua operasi yang berbeda ini sebagai transmisi (javax.mail.transport) dan penyimpanan (javax.mail.store), mengirimkan pengiriman surat yang sesuai, dan menyimpan penerimaan surat yang sesuai.
GetTransport: getTransport () di kelas sesi memiliki beberapa metode kelebihan beban yang dapat digunakan untuk membuat objek transportasi.
Hubungkan: Jika perintah otentikasi - mail.smtp.Auth diatur, maka saat menghubungkan ke server menggunakan metode Connect dari kelas transportasi, nama pengguna dan kata sandi harus ditambahkan.
SendMessage: Metode SendMessage dari kelas transportasi digunakan untuk mengirim pesan surat.
Tutup: Metode Tutup kelas transportasi digunakan untuk menutup koneksi ke server surat.
9. javax.mail.store class (penyimpanan surat)
GetStore: getStore () di kelas sesi memiliki beberapa metode kelebihan beban yang dapat digunakan untuk membuat objek toko.
Hubungkan: Jika perintah otentikasi - mail.smtp.Auth diatur, maka saat menghubungkan ke server menggunakan metode Connect dari kelas toko, nama pengguna dan kata sandi harus ditambahkan.
GetFolder: Metode GetFolder dari kelas toko dapat memperoleh objek folder folder di kotak surat.
Tutup: Metode Tutup kelas toko digunakan untuk menutup koneksi ke server surat.
10. javax.mail.message (objek pesan)
javax.mail.message adalah kelas abstrak yang hanya dapat dipakai oleh subkelas, dan dalam kebanyakan kasus itu adalah javax.mail.internet.mimemessage.
Mimemessage mewakili pesan email dari tipe mime.
Untuk membuat pesan, Anda perlu meneruskan objek sesi ke konstruktor Mimemessage:
Pesan mimemessage = mimemessage baru (sesi);
Catatan: Ada konstruktor lain, seperti menggunakan aliran input dalam format RFC822 untuk membuat pesan.
setfrom: atur pengirim email
SetRecipient: Setel pengirim, cc person, dan orang rahasia dari email
Tiga jenis alamat yang telah ditentukan adalah:
Message.recipienttype.to: penerima
Message.recipienttype.cc: CC Person
Message.recipienttype.bcc: diam -diam berikan
SetSubject: Tetapkan subjek email
SetContent: Setel konten email
Settext: Jika konten email adalah teks biasa, Anda dapat menggunakan antarmuka ini untuk mengatur konten teks.
10. javax.mail.address (alamat)
Setelah Anda membuat sesi dan pesan dan mengisi pesan, Anda dapat menggunakan alamat untuk menentukan alamat surat. Seperti pesan, alamat juga merupakan kelas abstrak. Anda menggunakan kelas javax.mail.internet.internetaddress.
Jika alamat yang dibuat hanya berisi alamat email, cukup berikan alamat email ke konstruktor.
contoh:
Alamat alamat = internetAddress baru ("[email dilindungi]");
Authenticator: Bersertifikat
Seperti kelas java.net, API Javamail juga dapat memanfaatkan Authenticator untuk mengakses sumber daya yang dilindungi melalui nama pengguna dan kata sandi. Untuk API Javamail, sumber daya ini adalah server surat. Javamail Authenticator ada dalam paket Javax.mail, dan berbeda dari Authenticator kelas dengan nama yang sama di java.net. Keduanya tidak berbagi authenticator yang sama karena API Javamail digunakan untuk Java 1.1, dan tidak memiliki kategori Java.net.
Untuk menggunakan Authenticator, pertama -tama buat subkelas dari kelas abstrak dan kembalikan contoh kata sandi dari metode getPasswordAuthentication (). Setelah pembuatan selesai, Anda harus mendaftarkan Authenticator dengan Sesi. Kemudian, ketika otentikasi diperlukan, autentikator akan diberitahu. Anda dapat memunculkan Windows atau membaca nama pengguna dan kata sandi dari file konfigurasi (walaupun tidak aman untuk tidak mengenkripsi) dan mengembalikannya ke program panggilan sebagai objek ATMPORTHENTICATION.
contoh:
Properti props = properti baru (); authenticator auth = myAuthenticator baru (); session session = session.getDefaultInstance (props, auth);
Contoh
Kirim Surat Teks
public static void main (string [] args) melempar pengecualian {properties prop = properti baru (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Buat sesi sesi sesi = session.getInstance (prop); Transportasi ts = null; // 2. Dapatkan objek transportasi melalui sesi ts = session.getTransport (); // 3. Sambungkan ke server mail ts.connect (mail_server_host, pengguna, kata sandi); // 4. Buat pesan mimemessage pesan = mimemessage baru (sesi); // email pesan header pesan.setFrom (internetAddress baru (mail_from)); // pengirim pesan. // penerima pesan email. // pesan CC.setrecipient (message.recipienttype.bcc, internetAddress baru (mail_bcc)); // pesan pengirim pesan.setsubject ("uji pesan teks"); // judul email // pesan pesan.setText ("tak tertandingi di dunia."); // 5. Kirim email ts.sendMessage (pesan, pesan.getAllrecipients ()); ts.close ();}Kirim email yang diformat HTML
public static void main (string [] args) melempar pengecualian {properties prop = properti baru (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Buat sesi sesi sesi = session.getInstance (prop); Transportasi ts = null; // 2. Dapatkan objek transportasi melalui sesi ts = session.getTransport (); // 3. Sambungkan ke server mail ts.connect (mail_server_host, pengguna, kata sandi); // 4. Buat pesan mimemessage pesan = mimemessage baru (sesi); // email pesan header pesan.setFrom (internetAddress baru (mail_from)); // pengirim pesan. // penerima pesan email. // pesan CC.setrecipient (message.recipienttype.bcc, internetAddress baru (mail_bcc)); // penerima pesan email. // judul string email htmlcontent = "<h1> halo </h1>" + "<p> Tunjukkan gambar <img src = 'cid: abc.jpg'> 1.jpg </p>"; Mimebodypart text = mimebodypart baru (); text.setContent (htmlcontent, "text/html; charset = utf-8"); Gambar mimebodypart = mimebodypart baru (); Datahandler dh = datahandler baru (baru fileDataSource ("d: // [04] temp // img // 1.jpg")); Image.setDataHandler (DH); Image.setContentId ("ABC.JPG"); // Jelaskan hubungan data mimemultipart mm = mimemultipart baru (); mm.addbodypart (teks); mm.addbodypart (gambar); mm.setsubtype ("terkait"); message.setContent (mm); message.savechanges (); // 5. Kirim email ts.sendMessage (pesan, pesan.getAllrecipients ()); ts.close ();}Kirim email dengan lampiran
public static void main (string [] args) melempar pengecualian {properties prop = properti baru (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Buat sesi sesi sesi = session.getInstance (prop); Transportasi ts = null; // 2. Dapatkan objek transportasi melalui sesi ts = session.getTransport (); // 3. Sambungkan ke server mail ts.connect (mail_server_host, pengguna, kata sandi); // 4. Buat pesan mimemessage pesan = mimemessage baru (sesi); // email pesan header pesan.setFrom (internetAddress baru (mail_from)); // pengirim pesan. // penerima pesan email. // pesan CC.setrecipient (message.recipienttype.bcc, internetAddress baru (mail_bcc)); // penerima pesan email. // judul email mimebodypart text = new mimebodypart (); text.setContent ("Ada dua lampiran dalam email.", "Teks/html; charset = UTF-8"); // Jelaskan hubungan data mimemultipart mm = mimemultipart baru (); mm.setsubtype ("terkait"); mm.addbodypart (teks); String [] file = {"d: // [04] temp // img // 1.jpg", "d: // [04] temp // img // 2.jpg"}; // tambahkan lampiran email untuk (string fileName: file) {mimebodypart lampiran = mimebodypart baru (); lampiran.AttachFile (nama file); mm.addbodypart (lampiran); } message.setContent (mm); message.savechanges (); // 5. Kirim email ts.sendMessage (pesan, pesan.getAllrecipients ()); ts.close ();}Dapatkan email di kotak surat Anda
StoreMail kelas publik {final static string user = "robot"; // nama pengguna string statis final kata sandi = "kata sandi520"; // kata sandi public final string statis mail_server_host = "mail. ***. Com"; // server kotak surat final public string statis type_html = "text/html; charset = utf-8"; // jenis konten teks string statis final publik mail_from = "[email dilindungi]"; // pengirim public final static string mail_to = "[email dilindungi]"; // kepada penerima string statis final publik mail_cc = "[email dilindungi]"; // cc person public final static string mail_bcc = "[email dilindungi]"; // diam -diam mengirim public static void main (string [] args) melempar Exception {// Buat objek Properties dengan Properti Informasi Koneksi Spesifik Prop = New Properties (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.store.protocol", "Pop3"); prop.setProperty ("mail.pop3.host", mail_server_host); // 1. Buat sesi sesi sesi sesi = session.getInstance (prop); // 2. Dapatkan objek toko melalui Sesi Store Store = session.getStore (); // 3. Sambungkan ke Store Server Mail.connect (mail_server_host, pengguna, kata sandi); // 4. Dapatkan folder surat di folder kotak surat = Store.getFolder ("Inbox"); folder.open (folder.read_only); // Dapatkan semua pesan di pesan Folder Pesan Pesan [] pesan = folder.getMessages (); untuk (int i = 0; i <pesan.length; i ++) {string subjek = pesan [i] .getSubject (); String from = (pesan [i] .getFrom () [0]). ToString (); System.out.println ("th" + (i + 1) + "Subjek pesan:" + subjek); System.out.println ("th" + (i + 1) + "Alamat pengirim email:" + dari); } // 5. Tutup folder.close (false); store.close (); }}Teruskan email
Contoh: Dapatkan email pertama di bawah folder surat yang ditentukan dan teruskan
public static void main (string [] args) melempar pengecualian {properties prop = properti baru (); prop.put ("mail.store.protocol", "Pop3"); prop.put ("mail.pop3.host", mail_server_host); prop.put ("mail.pop3.starttls.enable", "true"); prop.put ("mail.smtp.auth", "true"); prop.put ("mail.smtp.host", mail_server_host); // 1. Buat sesi sesi sesi = session.getDefaultInstance (prop); // 2. Baca toko folder Mail Store = session.getStore ("POP3"); Store.Connect (mail_server_host, pengguna, kata sandi); Folder folder = store.getFolder ("inbox"); folder.open (folder.read_only); // Dapatkan pesan email pertama di pesan folder email [] pesan = folder.getMessages (); if (pesan.length <= 0) {return; } Pesan pesan = pesan [0]; // cetak string pesan kunci dari = internetAddress.toString (message.getFrom ()); if (from! = null) {System.out.println ("dari:" + from); } String replyTo = internetAddress.toString (message.getReplyto ()); if (replyTo! = null) {System.out.println ("Balas-to:" + ReplyTo); } String ke = internetAddress.toString (message.getRecipients (message.recipienttype.to)); if (to! = null) {System.out.println ("to:" + to); } String subjek = message.getSubject (); if (subjek! = null) {System.out.println ("subjek:" + subjek); } Tanggal terkirim = message.getSentDate (); if (terkirim! = null) {System.out.println ("terkirim:" + terkirim); } // atur pesan header pesan email ke depan = mimemessage baru (sesi); forward.setFrom (InternetAddress baru (mail_from)); forward.setrecipient (message.recipienttype.to, new internetAddress (mail_to)); forward.setsubject ("fwd:" + message.getSubject ()); // atur konten email mimebodypart bodypart = mimebodypart baru (); bodypart.setContent (pesan, "pesan/rfc822"); Multipart multipart = mimemultipart baru (); multipart.addbodypart (bodypart); forward.setContent (multipart); forward.savechanges (); Transport ts = session.getTransport ("smtp"); ts.connect (pengguna, kata sandi); ts.sendMessage (Forward, Forward.getAllRecipients ()); folder.close (false); store.close (); ts.close (); System.out.println ("Pesan Disahatkan Berhasil ...");}Di atas adalah semua tentang artikel ini. Saya harap akan sangat membantu bagi semua orang untuk belajar cara mengirim dan menerima email melalui Javamail.