Java Mail adalah alat yang menggunakan akun email yang ada untuk mengirim email. Misalnya, saya mendaftarkan akun email dengan NetEase. Melalui kontrol Java Mail, saya tidak dapat masuk ke NetEase Mailbox secara langsung, sehingga program dapat secara otomatis menggunakan NetEase Mailbox untuk mengirim email. Mekanisme ini banyak digunakan dalam aktivasi pendaftaran dan pengiriman spam.
Proses umum pengiriman surat java adalah sebagai berikut:
1. Bangun kelas spesifik yang diwarisi dari javax.mail.authenticator, dan angkanya metode getPasswordAuthentication () di dalamnya. Kelas ini digunakan sebagai verifikasi login untuk memastikan bahwa Anda memiliki hak untuk mengirim email ke kotak surat ini.
2. Bangun file properti, yang menyimpan parameter seperti alamat server SMTP.
3. Buat javax.mail.Session melalui file properti yang dibangun dan kelas beton javax.mail.authenticator. Penciptaan sesi setara dengan masuk ke alamat email. Sisanya secara alami adalah email baru.
4. Untuk membangun konten email, umumnya itu adalah objek javax.mail.internet.mimemessage, dan tentukan pengirim, penerima, subjek, konten, dll.
5. Gunakan kelas alat javax.mail.transport untuk mengirim email.
Di bawah ini adalah kode yang saya ungkapkan, dan komentarnya juga cukup rinci.
1. Pertama, ini adalah kelas khusus yang diwarisi dari javax.mail.authenticator. Metode GetPasswordAuthentication () adalah membangun objek kata sandi dan mengembalikannya, yang agak membingungkan untuk memahami niat desain Java Mail. Mungkin saja javax.mail.authenticator memberi kami langkah -langkah verifikasi tambahan untuk memastikan keamanan.
paket com.mzule.simplemail; impor javax.mail.authenticator; impor javax.mail.passwordAuthentication; /** * Server Mailbox Login Verifikasi * * @Author Mzule * */Kelas Publik MailAuthenticator memperluas authenticator {/** * nama pengguna (Login Mailbox) */Private String username; / *** Kata sandi*/ kata sandi string pribadi; / *** inisialisasi kotak surat dan kata sandi** @param nama pengguna nama* @param kata sandi*/ public mailAuthenticator (string username, string password) {this.userName = userName; this.password = kata sandi; } String getPassword () {return kata sandi; } @Override Protected PasswordAuthentication getPasswordAuthentication () {return New PasswordAuthentication (nama pengguna, kata sandi); } String getUserName () {return username; } public void setPassword (kata sandi string) {this.password = kata sandi; } public void setusername (string username) {this.username = username; }}2. Kelas Pengiriman Email , langkah -langkah yang tersisa diimplementasikan di kelas ini. SimpleMail dalam kode adalah pojo yang merangkum subjek dan konten email. Saya merasa tidak tepat untuk memasukkan topik dan konten dalam parameter metode, jadi saya kelebihan beban metode ini. Juga, karena alamat server SMTP dari sebagian besar kotak surat dapat dihitung dengan alamat email. Untuk kesederhanaan, konstruktor yang tidak memerlukan alamat server SMTP disediakan.
paket com.mzule.simplemail; impor java.util.list; impor java.util.properties; Impor javax.mail.messagingException; impor javax.mail.Session; impor javax.mail.transport; impor javax.mail.internet.addressException; impor javax.mimemessage. javax.mail.internet.mimemessage.recipienttype; /*** Pengirim surat sederhana, dapat dikirim dalam satu atau massa. * * @Author mzule * */kelas publik SimpleMailSender {/** * Props file untuk mengirim email */private final transient properties props = system.getProperties (); / *** Verifikasi Login Server Mail*/ Private Transient MailAuthenticator Authenticator; / ** * Sesi Email */ Sesi Sesi Transien Pribadi; / ** * Inisialisasi pengirim surat * * @param smtphostname * Alamat server surat SMTP * @param nama pengguna * nama pengguna (alamat) untuk mengirim surat * @param kata sandi * Kata sandi untuk mengirim email */ Public SimplemailSender (string final smtphostname, final string username, final string kata sandi) {init, kata sandi, kata sandi, smthphostname); smm) {init name, sm -uSerphostname) {init name, smftphostname); smtphostname) {init name, soundphost) {init name, soundphost, smtphostname); } /*** Inisialisasi pengirim email** nama pengguna @param* Nama pengguna (alamat) dari email yang mengirim email, dan gunakan ini untuk menyelesaikan alamat server smtp* @param kata sandi* Kata sandi untuk mengirim email* /public simplemailsender (yang berfungsi sebagai smtppox = SMTPLE FINOMNE) {// Selesaikan server SMTP melalui SMTP. + username.split ("@") [1]; init (nama pengguna, kata sandi, smtphostname); } / ** * Inisialisasi * * @param nama pengguna * nama pengguna (alamat) untuk mengirim email * @param kata sandi * Kata sandi * @param smtphostname * alamat host smtp * / inisialisasi props props.put ("string," string smtphostname) {// inisialisasi props props.put ("mail.smtp.auth") {") {// inisialisasi props props.put (" mail.smtp.auth ") {") {") (" mail. props.put ("mail.smtp.host", smtphostname); // verifikasi authenticator = mailauthenticator baru (nama pengguna, kata sandi); // Buat session Sesi = session.getInstance (alat peraga, authenticator); } / ** * Kirim email * * @param penerima * Alamat email penerima * @param subjek * Subjek email * @param konten * Konten email * @throws addressException * @throws MessagingException * / public void kirim (penerima string, Subjek String, Object Content) Lempar AddressException, MessagingException {// Buat tipe MAIL MAILE MAIL MAZESSIRAGE = MAMESSIRE = MAMESSIRE (MAMESSIRE UNIMESSEXCEPION = MAZESSEXCEPION {// CRINGE MAIL MAIL MAZESSIMESSPEAGE = MAZESSIRE (MAMESSIRE UNIMESSEPSEPION = MAZESSEXCECEPION { / / // atur pengirim pesan.setFrom (new internetAddress (authenticator.getUserName ())); // atur pesan penerima. // Atur Topic Message.setsubject (subjek); // Atur pesan konten pesan.setContent (content.toString (), "Text/html; charset = UTF-8"); // kirim transport.send (pesan); } / ** * Email curah * * @param penerima * penerima * @param subjek * subjek * @param konten * konten * @throws addressException * @throws MessagingException * / public void kirim (daftar <string> penerima, Subjek String, Konten Objek) Melemparkan ADVERSEXCEPTION, MessagingException {// Create Mail Tipe Mail Final MIMESSAGE = MessagingException {// Create Mail Mail Mail MAmemes Fine // atur pesan pengirim.setFrom (internetAddress baru (authenticator.getUserName ())); // atur penerima final int num = penerima.size (); InternetAddress [] alamat = InternetAddress baru [num]; untuk (int i = 0; i <num; i ++) {alamat [i] = new internetAddress (penerima.get (i)); } message.setrecipients (recepementType.to, alamat); // Atur Topic Message.setsubject (subjek); // atur pesan konten mail.setContent (content.toString (), "text/html; charset = utf-8"); // kirim transport.send (pesan); } / ** * Kirim email * * @param penerima * Alamat email penerima * @param mail * Objek email * @throws addressException * @throws MessagingException * / public void Send (penerima string, SimpleMail Mail) melempar addressException, MessagingException {penerima, mail.getSubject (), mail.getcon } / ** * Email curah * * @param penerima * penerima * @param mail * Objek email * @throws addressException * @throws MessagingException * / public void kirim (Daftar <string> penerima, SimpleMail Mail) melempar addressException, MessagingException {Send (penerima, mail.getsubject (), mail.get. }}3. Memanggil pengirim kotak surat di atas dapat membangun kelas pabrik . Kelas pabrik dapat merangkum proses pembuatan, sehingga menjadi sangat nyaman untuk mendapatkan nama pengguna kotak surat dengan membaca file konfigurasi. Kode berikut ditulis ketika saya sedang menulis mode pengamat, dan itu hanya menunjukkan secara singkat kelas pabrik.
paket com.mzule.dp.observer.factory; impor com.mzule.dp.observer.constant.mailsenderType; import com.mzule.simplemail.simplemailsender; /*** OutBox Factory** @author mzule**/kelas publik mailsenderfactory {/*** Layanan kotak surat*/private static smelemailsender servicesmsssssssssss = null; /** * Get mailbox* * @param type Mailbox type* @return mailbox that matches the type*/ public static SimpleMailSender getSender(MailSenderType type) { if (type == MailSenderType.SERVICE) { if (serviceSms == null) { serviceSms = new SimpleMailSender("[email protected]", "hidden"); } mengembalikan layanan; } return null; }}4. Kirim email atau kode dalam demo mode pengamat, ya.
paket com.mzule.dp.observer.observer; Impor java.util.arraylist; impor java.util.list; impor java.util.observable; impor java.util.observable; impor java.util.observable; import java.util.observer; impor javax.mail.messsageDexception; impor javax. com.mzule.dp.observer.constant.mailsenderType; impor com.mzule.dp.observer.factory.mailsenderfactory; import com.mzule.dp.observer.po.product; import com.mzule.simplemail.simplemersender; Public Class ProductPriceObServer mengimplementasikan pengamat {@Override public void update (OBJ yang dapat diamati, objek arg) {produk produk = null; if (obj instance dari produk) {produk = (produk) obj; } if (arg instanceof float) {float price = (float) arg; Float decrease = product.getPrice () - harga; if (recreage> 0) {// Kirim email SimpleMailSender sms = mailSendFactory .getSender (mailsenderType.service); Daftar <String> penerima = ArrayList baru <string> (); penerima.add ("[email protected]"); penerima.add ("[email protected]"); coba {untuk (penerima string: penerima) {sms.send (penerima, "perubahan harga", "item yang Anda perhatikan" + produk.getName () + "Harga telah dikurangi, dari" + Product.getPrice () + "Yuan ke" + Harga + "Yuan, penurunan dicapai" + penurunan + "yuan retmb. }} Catch (AddressException e) {E.PrintStackTrace (); } catch (MessagingException e) {E.PrintStackTrace (); }}}}} 5. Periksa apakah email telah berhasil dikirim.
Di atas adalah seluruh proses mengirim email Java, dan saya harap ini akan membantu untuk pembelajaran semua orang.