Artikel ini adalah artikel kedua belas dari seri VHR, dengan alamat proyek https://github.com/lenve/vhr
Pengiriman email juga merupakan masalah umum. Meskipun kodenya sederhana, banyak teman tidak memahami prosesnya dengan baik, jadi mereka masih berencana untuk berbicara dengan Anda tentang topik ini.
Perjanjian Email
Kami sering mendengar berbagai protokol email, seperti SMTP, POP3, dan IMAP. Jadi apa fungsi protokol ini dan apa perbedaannya? Mari kita bahas masalah ini terlebih dahulu.
SMTP adalah protokol lapisan aplikasi berdasarkan TCP/IP. Statusnya agak mirip dengan HTTP. Nomor port default dari server SMTP adalah 25. Melihat ini, teman -teman mungkin berpikir bahwa karena protokol SMTP didasarkan pada protokol lapisan aplikasi TCP/IP, dapatkah saya juga mengirim email melalui soket? Jawabannya adalah ya.
Dalam hidup, kita harus melalui langkah -langkah berikut:
1. Xiao Wang dari Shenzhen pertama kali mengirimkan email ke kantor pos di Shenzhen
2. Kantor Pos di Shenzhen akan mengirimkan surat ke kantor pos di Shanghai
3. Xiao Zhang dari Shanghai datang ke kantor pos untuk mengambil surat
Ini adalah versi yang dikurangi dari proses pengiriman surat dalam hidup. Tiga langkah ini dapat sesuai dengan proses pengiriman email kami secara terpisah. Misalkan email dikirim dari [email protected] ke [email protected]:
[email protected] terlebih dahulu mengirimkan email ke server surat Tencent
2. Server surat Tencent mengirimkan surat kami ke server email NetEase
[email protected] Masuk ke server email Netease untuk melihat email
Pengiriman email kira -kira proses ini, yang melibatkan banyak protokol. Mari kita lihat secara terpisah.
Nama lengkap protokol SMTP adalah protokol transfer surat sederhana, yang diterjemahkan sebagai protokol transfer surat sederhana. Ini mendefinisikan aturan komunikasi antara perangkat lunak klien mail dan server SMTP dan server SMTP. Dengan kata lain, proses pengiriman email ke server SMTP Tencent pertama kali menggunakan protokol SMTP, dan kemudian server SMTP Tencent mengirimkan email ke server SMTP NetEase masih menggunakan protokol SMTP, yang digunakan untuk menerima email. Nama lengkap protokol POP3 adalah Protokol Kantor Pos, yang diterjemahkan sebagai Protokol Kantor Pos. Ini mendefinisikan aturan komunikasi antara klien surat dan server POP3. Jadi dalam skenario apa protokol ini akan digunakan? Ketika email tiba di server SMTP NetEase, pengguna [email protected] perlu masuk ke server untuk melihat email. Pada saat ini, perjanjian digunakan: Penyedia layanan email akan memberi setiap pengguna ruang penyimpanan email khusus. Setelah server SMTP menerima email, itu menyimpan email ke ruang penyimpanan email pengguna yang sesuai. Jika pengguna ingin membaca email, itu perlu diselesaikan melalui server email POP3 penyedia layanan email. Akhirnya, beberapa teman mungkin pernah mendengar tentang protokol IMAP, yang merupakan perpanjangan dari protokol POP3, dengan fungsi yang lebih kuat dan fungsi serupa. Saya tidak akan mengulanginya di sini.
Persiapan untuk Mengirim Email QQ
Pertama -tama, kita perlu masuk ke versi web email QQ dan klik tombol Pengaturan di atas:
Kemudian klik tab Akun:
Temukan opsi untuk mengaktifkan POP3/SMTP di tab Akun, sebagai berikut:
Klik untuk mengaktifkan fungsi yang relevan. Proses aktivasi memerlukan verifikasi nomor ponsel. Ikuti saja langkah -langkahnya dan jangan rumit. Setelah diaktifkan dengan sukses, Anda dapat memperoleh kode otorisasi, menyimpan nomor dan menggunakannya untuk sementara waktu.
Kemudian kita membutuhkan paket Javaxmail Jar. Teman dapat langsung mengunduhnya di Maven Central Warehouse. Saya tidak akan pergi ke detail berikut di sini.
mengirim
Email sederhana
Jika kami hanya mengirim teks sederhana, metode pengiriman akan relatif sederhana. Seluruh proses dapat dibagi menjadi tiga langkah sebagai berikut:
Langkah 1: Bangun lingkungan dasar server surat SMTP
Properties Properties = Properties Baru (); Properties.SetProperty ("Mail.host", "smtp.qq.com"); properties.setProperty ("mail.transport.protocol", "smtp"); properties.setProperty ("mail.smtp.auth", " "true"); properties.setProperty ("mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketfactory"); properties.setProperty ("mail.smtp.port", "465"); session sesi = sesion.getDefaultin (properties "," 465 "); session = session.getDefaultin (Properties (" 465 "); session = session.getDefaultin (Properties", "465"); session = session.getDefaultin (Properties "," 465 "); sessi session.setDebug (true);Langkah 2: Bangun email
Mimemessage mimemessage = mimemessage baru (sesi); mimemessage.addrecipients (message.recipienttype.to, "[email protected]"); // Setel penerima mimemessage.addrecipients (message.recipientpype.cc, "[email protected]"); mimemessage.setfrom ("[email protected]"); // Email pengirim Mimemessage.setsubject ("Tes Subjek Email"); // Email topik Mimemessage.setContent ("Halo, ini adalah email uji", "Teks/html; charset = utf-8");
Langkah 3: Kirim Email
Transport Transport = session.getTransport (); Transport.Connect ("smtp.qq.com", "[email protected]", "Kode Otorisasi yang baru saja diaplikasikan"); Transport.SendMessage (Mimemessage, Mimemessage.getallrecipients ());/Kirim email, parameter kedua adalah penerima.Email yang kompleks
Saat mengirim email yang kompleks, langkah pertama dan ketiga adalah sama. Hanya langkah kedua yang lebih merepotkan dalam membangun email. Kemudian, izinkan saya menunjukkan kepada Anda email yang mengirim gambar dan teks + dua lampiran. Untuk mengirim email yang kompleks, Anda harus terlebih dahulu terbiasa dengan tiga konsep, sebagai berikut:
1.MimeMessage: Kelas ini adalah pesan email yang dapat memahami jenis dan header MIME.
2.MIMEMULTIPART: Kelas ini mendefinisikan metode untuk menambah, menghapus, dan memperoleh bagian yang berbeda dari email
3.MimebodyPart: Objek ini mewakili bagian dari isi objek mimemessage. Setiap mimebodypart dianggap memiliki dua bagian: jenis mime dan konten yang sesuai dengan jenis ini
Proses pembuatan email lengkap adalah sebagai berikut (lihat di atas untuk langkah pertama dan ketiga):
Mimemessage mimemessage = mimemessage baru (sesi); mimemessage.addrecipients (message.recipienttype.to, "[email protected]"); // Setel penerima mimemessage.addrecipients (message.recipientpype.cc, "[email protected]"); mimeMessage.setFrom("[email protected]");//Email sender mimeMessage.setSubject("Test email topic");//Email topic MimeMultipart mixed = new MimeMultipart("mixed");mimeMessage.setContent(mixed);//Set the MIME message body of the entire email into a mixed combination relationship MimeBodyPart attach1 = new Mimebodypart (); // Buat lampiran 1MimeBodyPart lampiran2 = mimebodypart baru (); // Buat lampiran 2Mimebodypart content = mimebodypart baru (); // Buat body mixed body. mixed.addBodyPart(content);//Add the body to the message body FileDataSource fds1 = new FileDataSource(new File("C://Users//sang//Desktop//1.png"));//Construct the data source of Attachment One DataHandler dh1 = new DataHandler(fds1);//Data processing lampiran1.setDataHandler (DH1); // Atur sumber data lampiran 1 terlampir1.setFileName ("1.png"); // Setel nama file dari lampiran 1 // pengoperasian lampiran 2 mirip dengan lampiran 1, jadi kami tidak akan berkomentar masing -masing di sini. FileDataSource fds2 = new FileDataSource (file baru ("c: // pengguna // sang // desktop // blog note.xlsx")); dataahandler dh2 = datahandler baru (fds2); lampiran2.setDataHandler (dh2); lampiran2.setfilename (mimeutility. Nama file, jika ada bahasa Cina, Anda dapat mengkodekannya melalui metode encodeText di kelas mimeutilitas untuk menghindari mimemultipart bodymimultipart baru = mimemultipart baru ("terkait"); // atur jenis mime dari konten tubuh. MimeBodyPart();//HTML part of the bodyPart.setContent("<h1>Hello everyone, this is a test email <img src='cid:2.png'//</h1>","text/html;charset=utf-8");MimeBodyPart picPart = new MimeBodyPart();//The picture part of the bodyDataHandler datahandler = datahandler baru (FileDataSource baru ("c: //users//sang//desktop//2.png")); picpart.setDataHandler (DataHandler); picpart.setContentId ("2.png"); // Tambahkan html dan bagian gambar tubuh ke bodymimemultipart.addbodypart (bodypart); bodymimemultipart.addbodypart (picpart); mimemessage.savechanges ();
Oke, semudah mengirim email QQ melalui Java Mail. Adapun hal -hal lain seperti 163, Sina, dll., Gaya penulisannya serupa, saya tidak akan menguraikannya di sini.
Meringkaskan
Di atas adalah kode implementasi fungsi email QQ di Springboot yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!