015_JavaMail
1. 郵件服務(wù)器
1.1. 類似于web服務(wù)器(如Tomcat)、數(shù)據(jù)庫服務(wù)器(如MySql), 把一臺郵件服務(wù)器端軟件放在網(wǎng)絡(luò)上, 即可供廣大網(wǎng)絡(luò)用戶使用。
1.2. 類似于郵局, 用戶發(fā)郵件時, 郵件服務(wù)器處理, 再投遞給相應(yīng)的郵箱地址。
1.3. 比如: 有sina、sohu、163、qq等等郵件服務(wù)器。
2. 電子郵箱: 郵件服務(wù)器中的賬戶, 服務(wù)器會為每個郵箱賬戶分配地址和空間。
3. 郵件收發(fā)協(xié)議
3.1. SMTP(發(fā)送郵件協(xié)議, 默認端口25)。
3.2. POP3(收取郵件協(xié)議, 默認端口110, 不能在線操作)。
3.3. IMAP(收取郵件協(xié)議, 默認端口143, 運行在TCP/IP協(xié)議之上, 與POP3的主要區(qū)別: 可以在線操作, 用戶可以不用把所有的郵件全部下載, 可以通過客戶端直接對服務(wù)器上的郵件進行操作)。
3.4. 開通qq郵件的SMTP服務(wù), 讓自己的qq郵件成為一個可以發(fā)送郵件的服務(wù)器
3.4.1. 登錄自己的qq郵箱, 點擊設(shè)置, 然后點擊賬戶
3.4.2. 找到"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)", 點擊"開啟"按鈕
3.4.3. 按提示發(fā)送短信, 發(fā)送完成點擊"我已發(fā)送"按鈕
3.4.4. 開通完成
4. 創(chuàng)建電子郵件
4.1. 郵件頭
- from字段(發(fā)件人)
- to字段(收件人)
- subject字段(郵件標題)
- cc字段(抄送) / bcc字段(密送)
4.2. 郵件體
- 郵件內(nèi)容
4.3. 抄送: A發(fā)給B, 選擇抄送給C, B可以看見郵件抄送給C。
4.4. 密送: A發(fā)給B, 選擇暗送給C, B可以看見郵件, 但是不能看到郵件發(fā)給C。
4.5. 郵件創(chuàng)建步驟
4.5.1. 創(chuàng)建一個郵件對象。
4.5.2. 設(shè)置發(fā)件人, 收件人, 可選增加多個收件人, 抄送人, 密送人。
4.5.3. 設(shè)置郵件的主題(標題)。
4.5.4. 設(shè)置郵件的正文(內(nèi)容)。
4.5.5. 設(shè)置顯示的發(fā)送時間。
4.5.6. 保存到本地。
5. JavaMail
5.1. JavaMail是一套郵件收發(fā)程序API, 編寫JavaMail程序就是編寫郵件客戶端程序(類似于qq、新浪等郵件客戶端)。
5.2. Github上JavaMail下載地址: https://javaee.github.io/javamail/
5.3. 例子
5.3.1.?新建一個名為JavaMail的Java項目, 同時添加相關(guān)jar包
5.3.2.?添加幾個文件
5.3.3.?編寫MailUtils.java
package com.zr.mail;import java.util.Date; import java.util.List; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;public class MailUtils {// SMTP服務(wù)器地址private final static String SMTP = "smtp.qq.com";// 發(fā)件賬戶private final static String USER = "xxxxxx@qq.com"; // 發(fā)件密碼private final static String PASSWORD = "drnhiqgdgad"; // 發(fā)件人public static String FROM = "xxxxxx@qq.com";// 收件人public static String RECIPIENT = "oooooo@qq.com";/*** 創(chuàng)建郵件服務(wù)器鏈接會話*/public static Session createSession() {// 創(chuàng)建參數(shù)配置, 用于連接郵件服務(wù)器的參數(shù)配置Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp");props.setProperty("mail.smtp.host", SMTP);// 連接認證props.setProperty("mail.smtp.auth", "true");// 在控制臺顯示連接日志信息props.put("mail.debug", "true");// 與郵件服務(wù)器連接會話Session session = Session.getInstance(props);return session;}/*** 發(fā)送郵件* @param session 與郵件服務(wù)器連接會話* @param message 郵件信息* @throws MessagingException */public static void sendMail(Session session, Message message) throws MessagingException {// 1. 根據(jù)Session獲取郵件傳輸對象Transport transport = session.getTransport();// 2. 使用 郵箱賬號和密碼連接郵件服務(wù)器, 這里認證的郵箱必須與 message中的發(fā)件人郵箱一致, 否則報錯transport.connect(USER, PASSWORD);// 3. 發(fā)送郵件, 發(fā)到所有的收件地址, message.getAllRecipients()獲取到的是在創(chuàng)建郵件對象時添加的所有收件人, 抄送人, 密送人transport.sendMessage(message, message.getAllRecipients());// 4. 關(guān)閉連接transport.close();}private static Message createMessage(Session session, String sendMail, String subject, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException {// 1. 創(chuàng)建一封郵件Message message = new MimeMessage(session);// 2. From: 發(fā)件人message.setFrom(new InternetAddress(sendMail));// 3. To: 收件人(可以增加多個收件人、抄送、密送)for (String item : tos) {message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress(item));}if(ccs != null) {for (String item : ccs) {message.addRecipient(MimeMessage.RecipientType.CC, new InternetAddress(item));}}if(bccs != null) {for (String item : bccs) {message.addRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(item));}}// 4. Subject: 郵件主題message.setSubject(subject);// 5. 設(shè)置發(fā)件時間message.setSentDate(new Date());return message;}public static Message textMessage(Session session, String sendMail, String subject, Object o, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException {Message message = createMessage(session, sendMail, subject, tos, ccs, bccs);message.setContent(o, "text/html;charset=UTF-8"); // 郵件正文message.saveChanges(); // 保存設(shè)置return message;}public static Message multiMessage(Session session, String sendMail, String subject, Multipart m, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException {Message message = createMessage(session, sendMail, subject, tos, ccs, bccs);message.setContent(m); // 郵件正文message.saveChanges(); // 保存設(shè)置return message;} }5.3.4.?編寫MyMail.java
package com.zr.mail;import java.io.IOException; import java.util.Arrays; import java.util.List; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.internet.AddressException; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMultipart;public class MyMail {public static void main(String[] args) {try {Session session = MailUtils.createSession();Message message = textMessage(session, MailUtils.FROM, Arrays.asList(MailUtils.RECIPIENT), Arrays.asList("aihiao@sina.com"), null);MailUtils.sendMail(session, message);} catch (Exception e) {e.printStackTrace();}}// 純文本郵件public static Message textMessage(Session session, String sendMail, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException {return MailUtils.textMessage(session, sendMail, "測試Java Mail", "只發(fā)送了純文本的郵件", tos, ccs, bccs);}// 文本和圖片郵件public static Message imageMessage(Session session, String sendMail, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException, IOException {// 1. 圖片 MimeBodyPart pic1 = new MimeBodyPart();pic1.attachFile("config/ani_08.png");pic1.setContentID("ani_08");MimeBodyPart pic2 = new MimeBodyPart();pic2.attachFile("config/ani_09.png");pic2.setContentID("ani_09");// 2. 文字MimeBodyPart content = new MimeBodyPart();content.setContent("<html><body><img src='cid:ani_08' /><img src='cid:ani_09' /><br />包含圖片的郵件</body></html>", "text/html;charset=UTF-8");// 3. 封裝文字和圖片Multipart mp = new MimeMultipart();mp.addBodyPart(pic1);mp.addBodyPart(pic2);mp.addBodyPart(content);return MailUtils.multiMessage(session, sendMail, "測試Java Mail", mp, tos, ccs, bccs);}// 文本和文件郵件public static Message fileMessage(Session session, String sendMail, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException, IOException {// 1. 文件MimeBodyPart file = new MimeBodyPart();file.attachFile("config/ActiveMQ中文教程參考手冊.pdf");// 2. 文字MimeBodyPart content = new MimeBodyPart();content.setContent("<html><body>包含附件的郵件</body></html>", "text/html;charset=UTF-8");// 3. 封裝文字和附件Multipart mp = new MimeMultipart();mp.addBodyPart(file);mp.addBodyPart(content);return MailUtils.multiMessage(session, sendMail, "測試Java Mail", mp, tos, ccs, bccs);}// 文本、圖片和文件郵件public static Message imageFileMessage(Session session, String sendMail, List<String> tos, List<String> ccs, List<String> bccs) throws AddressException, MessagingException, IOException {// 1. 圖片 MimeBodyPart pic1 = new MimeBodyPart();pic1.attachFile("config/ani_08.png");pic1.setContentID("ani_08");MimeBodyPart pic2 = new MimeBodyPart();pic2.attachFile("config/ani_09.png");pic2.setContentID("ani_09");// 2. 文件MimeBodyPart file = new MimeBodyPart();file.attachFile("config/ActiveMQ中文教程參考手冊.pdf");// 3. 文字MimeBodyPart content = new MimeBodyPart();content.setContent("<html><body><img src='cid:ani_08' /><img src='cid:ani_09' /><br />包含圖片和附件的郵件</body></html>", "text/html;charset=UTF-8");// 4. 封裝文字、圖片和附件Multipart mp = new MimeMultipart();mp.addBodyPart(pic1);mp.addBodyPart(pic2);mp.addBodyPart(file);mp.addBodyPart(content);return MailUtils.multiMessage(session, sendMail, "測試Java Mail", mp, tos, ccs, bccs);} }5.3.5.?發(fā)送純文本給daiyingxiong同時發(fā)送給了aihiao
5.3.6.?發(fā)送純文本、圖片和文件給daiyingxiong同時抄送給了aihiao
總結(jié)
以上是生活随笔為你收集整理的015_JavaMail的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 016_logback中的Encoder
- 下一篇: 016_Spring中电子邮件