java中javamail收發郵件完成辦法。本站提示廣大學習愛好者:(java中javamail收發郵件完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是java中javamail收發郵件完成辦法正文
概述
1、郵件相干的尺度
廠商所供給的 JavaMail 辦事法式可以有選擇地完成某些郵件協定,罕見的郵件協定包含:
SMTP(Simple Mail Transfer Protocol) :即簡略郵件傳輸協定,它是一組用於由源地址到目標地址傳送郵件的規矩,由它來掌握函件的直達方法。
POP3(Post Office Protocol – Version 3) :即郵局協定版本 3 ,用於吸收電子郵件的尺度協定。
IMAP(Internet Mail Access Protocol) :即 Internet 郵件拜訪協定。是 POP3 的替換協定。
這三種協定都有對應 SSL 加密傳輸的協定,分離是 SMTPS , POP3S 和 IMAPS 。
MIME(Multipurpose Internet Mail Extensions) :即多用處因特網郵件擴大尺度。它不是郵件傳輸協定。但對傳輸內容的新聞、附件及其它的內容界說了格局。
2、JavaMail 簡介
JavaMail 是由 Sun 宣布的用來處置 email 的 API 。它並沒有包括在 Java SE 中,而是作為 Java EE 的一部門。
mail.jar :此 JAR 文件包括 JavaMail API 和 Sun 供給的 SMTP 、 IMAP 和 POP3 辦事供給法式;
activation.jar :此 JAR 文件包括 JAF API 和 Sun 的完成。
JavaMail 包頂用於處置電子郵件的焦點類是: Properties 、 Session 、 Message 、 Address 、 Authenticator 、 Transport 、 Store 等。
3、郵件傳輸進程
如上圖,電子郵件的處置步調以下:
4、Message 構造
MimeMessage 類:代表整封郵件。
MimeBodyPart 類:代表郵件的一個 MIME 信息。
MimeMultipart 類:代表一個由多個 MIME 信息組分解的組合 MIME 信息。
5、JavaMail 的焦點類
JavaMail 對收發郵件停止了高等的籠統,構成了一些症結的的接口和類,它們組成了法式的基本,上面我們分離來懂得一下這些最多見的對象。
6、java.util.Properties 類 ( 屬性對象 )
java.util.Properties 類代表一組屬性聚集。
它的每個鍵和值都是 String 類型。
因為 JavaMail 須要和郵件辦事器停止通訊,這就請求法式供給很多諸如辦事器地址、端口、用戶名、暗碼等信息, JavaMail 經由過程 Properties 對象封裝這些屬性信息。
例: 以下面的代碼封裝了幾個屬性信息:
Properties prop = new Properties(); prop.setProperty("mail.debug", "true"); prop.setProperty("mail.host", "[email protected]"); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true");
針對分歧的的郵件協定, JavaMail 劃定了辦事供給者必需支撐一系列屬性,
下表是一些罕見屬性(屬性值都以 String 類型停止設置,屬性類型欄僅表現屬性是若何被解析的):
7、javax.mail.Session 類 ( 會話對象 )
Session 表現一個郵件會話。
Session 的重要感化包含兩個方面:
吸收各類設置裝備擺設屬性信息:經由過程 Properties 對象設置的屬性信息;
初始化 JavaMail 情況:依據 JavaMail 的設置裝備擺設文件,初始化 JavaMail 情況,以便經由過程 Session 對象創立其他主要類的實例。
JavaMail 在 Jar 包的 META-INF 目次下,經由過程以下文件供給了根本設置裝備擺設信息,以便 session 可以或許依據這個設置裝備擺設文件加載供給者的完成類:
javamail.default.providers ;
javamail.default.address.map 。
例:
Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); Session session = Session.getInstance(props);
8、javax.mail.Transport 類 ( 郵件傳輸 )
郵件操作只要發送或吸收兩種處置方法。
JavaMail 將這兩種分歧操作描寫為傳輸( javax.mail.Transport )和存儲( javax.mail.Store ),傳輸對應郵件的發送,而存儲對應郵件的吸收。
getTransport : Session 類中的 getTransport () 有多個重載辦法,可以用來創立 Transport 對象。
connect : 假如設置了認證敕令—— mail.smtp.auth ,那末應用 Transport 類的 connect 辦法銜接辦事器時,則必需加上用戶名和暗碼。
sendMessage : Transport 類的 sendMessage 辦法用來發送郵件新聞。
close : Transport 類的 close 辦法用來封閉和郵件辦事器的銜接。
9、javax.mail.Store 類 ( 郵件存儲 )
getStore : Session 類中的 getStore () 有多個重載辦法,可以用來創立 Store 對象。
connect : 假如設置了認證敕令—— mail.smtp.auth ,那末應用 Store 類的 connect 辦法銜接辦事器時,則必需加上用戶名和暗碼。
getFolder : Store 類的 getFolder 辦法可以 獲得郵箱內的郵件夾 Folder 對象
close : Store 類的 close 辦法用來封閉和郵件辦事器的銜接。
10、javax.mail.Message( 新聞對象 )
javax.mail.Message 是個籠統類,只能用子類去實例化,多半情形下為 javax.mail.internet.MimeMessage 。
MimeMessage 代表 MIME 類型的電子郵件新聞。
要創立一個 Message ,須要將 Session 對象傳遞給 MimeMessage 結構器:
MimeMessage message = new MimeMessage(session);
留意:還存在其它結構器,如用按 RFC822 格局的輸出流來創立新聞。
setFrom :設置郵件的發件人
setRecipient :設置郵件的發送人、抄送人、密送人
三種預界說的地址類型是:
Message.RecipientType.TO :收件人
Message.RecipientType.CC :抄送人
Message.RecipientType.BCC :密送人
setSubject :設置郵件的主題
setContent :設置郵件內容
setText :假如郵件內容是純文本,可使用此接口設置文本內容。
10、javax.mail.Address( 地址 )
一旦您創立了 Session 和 Message ,並將內容填入新聞後,便可以用 Address 肯定函件地址了。和 Message 一樣, Address 也是個籠統類。您用的是 javax.mail.internet.InternetAddress 類。
若創立的地址只包括電子郵件地址,只需傳遞電子郵件地址到結構器就好了。
例:
Address address = new InternetAddress("[email protected]");
Authenticator :認證者
與 java.net 類一樣, JavaMail API 也能夠應用 Authenticator 經由過程用戶名和暗碼拜訪受掩護的資本。關於 JavaMail API 來講,這些資本就是郵件辦事器。 JavaMail Authenticator 在 javax.mail 包中,並且它和 java.net 中同名的類 Authenticator 分歧。二者其實不同享統一個 Authenticator ,由於 JavaMail API 用於 Java 1.1 ,它沒有 java.net 種別。
要應用 Authenticator ,先創立一個籠統類的子類,並從 getPasswordAuthentication() 辦法中前往 PasswordAuthentication 實例。創立完成後,您必須向 session 注冊 Authenticator 。然後,在須要認證的時刻,就會告訴 Authenticator 。您可以彈出窗口,也能夠從設置裝備擺設文件中(固然沒有加密是不平安的)讀取用戶名和暗碼,將它們作為 PasswordAuthentication 對象前往給挪用法式。
例:
Properties props = new Properties(); Authenticator auth = new MyAuthenticator(); Session session = Session.getDefaultInstance(props, auth);
實例
發送文本郵件
public static void main(String[] args) throws Exception { Properties prop = new Properties(); 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、創立session Session session = Session.getInstance(prop); Transport ts = null; // 2、經由過程session獲得transport對象 ts = session.getTransport(); // 3、連上郵件辦事器 ts.connect(MAIL_SERVER_HOST, USER, PASSWORD); // 4、創立郵件 MimeMessage message = new MimeMessage(session); // 郵件新聞頭 message.setFrom(new InternetAddress(MAIL_FROM)); // 郵件的發件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 郵件的收件人 message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 郵件的抄送人 message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 郵件的密送人 message.setSubject("測試文本郵件"); // 郵件的題目 // 郵件新聞體 message.setText("世界無雙。"); // 5、發送郵件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); }
發送 HTML 格局的郵件
public static void main(String[] args) throws Exception { Properties prop = new Properties(); 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、創立session Session session = Session.getInstance(prop); Transport ts = null; // 2、經由過程session獲得transport對象 ts = session.getTransport(); // 3、連上郵件辦事器 ts.connect(MAIL_SERVER_HOST, USER, PASSWORD); // 4、創立郵件 MimeMessage message = new MimeMessage(session); // 郵件新聞頭 message.setFrom(new InternetAddress(MAIL_FROM)); // 郵件的發件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 郵件的收件人 message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 郵件的抄送人 message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 郵件的密送人 message.setSubject("測試HTML郵件"); // 郵件的題目 String htmlContent = "<h1>Hello</h1>" + "<p>顯示圖片<img src='cid:abc.jpg'>1.jpg</p>"; MimeBodyPart text = new MimeBodyPart(); text.setContent(htmlContent, "text/html;charset=UTF-8"); MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource("D://[04]Temp//img//1.jpg")); image.setDataHandler(dh); image.setContentID("abc.jpg"); // 描寫數據關系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related"); message.setContent(mm); message.saveChanges(); // 5、發送郵件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); }
發送帶附件的郵件
public static void main(String[] args) throws Exception { Properties prop = new Properties(); 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、創立session Session session = Session.getInstance(prop); Transport ts = null; // 2、經由過程session獲得transport對象 ts = session.getTransport(); // 3、連上郵件辦事器 ts.connect(MAIL_SERVER_HOST, USER, PASSWORD); // 4、創立郵件 MimeMessage message = new MimeMessage(session); // 郵件新聞頭 message.setFrom(new InternetAddress(MAIL_FROM)); // 郵件的發件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); // 郵件的收件人 message.setRecipient(Message.RecipientType.CC, new InternetAddress(MAIL_CC)); // 郵件的抄送人 message.setRecipient(Message.RecipientType.BCC, new InternetAddress(MAIL_BCC)); // 郵件的密送人 message.setSubject("測試帶附件郵件"); // 郵件的題目 MimeBodyPart text = new MimeBodyPart(); text.setContent("郵件中有兩個附件。", "text/html;charset=UTF-8"); // 描寫數據關系 MimeMultipart mm = new MimeMultipart(); mm.setSubType("related"); mm.addBodyPart(text); String[] files = { "D://[04]Temp//img//1.jpg", "D://[04]Temp//img//2.jpg" }; // 添加郵件附件 for (String filename : files) { MimeBodyPart attachPart = new MimeBodyPart(); attachPart.attachFile(filename); mm.addBodyPart(attachPart); } message.setContent(mm); message.saveChanges(); // 5、發送郵件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); }
獲得郵箱中的郵件
public class StoreMail { final static String USER = "robot"; // 用戶名 final static String PASSWORD = "password520"; // 暗碼 public final static String MAIL_SERVER_HOST = "mail.***.com"; // 郵箱辦事器 public final static String TYPE_HTML = "text/html;charset=UTF-8"; // 文本內容類型 public final static String MAIL_FROM = "[email protected]"; // 發件人 public final static String MAIL_TO = "[email protected]"; // 收件人 public final static String MAIL_CC = "[email protected]"; // 抄送人 public final static String MAIL_BCC = "[email protected]"; // 密送人 public static void main(String[] args) throws Exception { // 創立一個有詳細銜接信息的Properties對象 Properties prop = new Properties(); prop.setProperty("mail.debug", "true"); prop.setProperty("mail.store.protocol", "pop3"); prop.setProperty("mail.pop3.host", MAIL_SERVER_HOST); // 1、創立session Session session = Session.getInstance(prop); // 2、經由過程session獲得Store對象 Store store = session.getStore(); // 3、連上郵件辦事器 store.connect(MAIL_SERVER_HOST, USER, PASSWORD); // 4、取得郵箱內的郵件夾 Folder folder = store.getFolder("inbox"); folder.open(Folder.READ_ONLY); // 取得郵件夾Folder內的一切郵件Message對象 Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { String subject = messages[i].getSubject(); String from = (messages[i].getFrom()[0]).toString(); System.out.println("第 " + (i + 1) + "封郵件的主題:" + subject); System.out.println("第 " + (i + 1) + "封郵件的發件人地址:" + from); } // 5、封閉 folder.close(false); store.close(); } }
轉發郵件
例:獲得指定郵件夾下的第一封郵件並轉發
public static void main(String[] args) throws Exception { Properties prop = new Properties(); 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、創立session Session session = Session.getDefaultInstance(prop); // 2、讀取郵件夾 Store store = session.getStore("pop3"); store.connect(MAIL_SERVER_HOST, USER, PASSWORD); Folder folder = store.getFolder("inbox"); folder.open(Folder.READ_ONLY); // 獲得郵件夾中第1封郵件信息 Message[] messages = folder.getMessages(); if (messages.length <= 0) { return; } Message message = messages[0]; // 打印郵件症結信息 String from = InternetAddress.toString(message.getFrom()); if (from != null) { System.out.println("From: " + from); } String replyTo = InternetAddress.toString(message.getReplyTo()); if (replyTo != null) { System.out.println("Reply-to: " + replyTo); } String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO)); if (to != null) { System.out.println("To: " + to); } String subject = message.getSubject(); if (subject != null) { System.out.println("Subject: " + subject); } Date sent = message.getSentDate(); if (sent != null) { System.out.println("Sent: " + sent); } // 設置轉發郵件信息頭 Message forward = new MimeMessage(session); forward.setFrom(new InternetAddress(MAIL_FROM)); forward.setRecipient(Message.RecipientType.TO, new InternetAddress(MAIL_TO)); forward.setSubject("Fwd: " + message.getSubject()); // 設置轉發郵件內容 MimeBodyPart bodyPart = new MimeBodyPart(); bodyPart.setContent(message, "message/rfc822"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(bodyPart); forward.setContent(multipart); forward.saveChanges(); Transport ts = session.getTransport("smtp"); ts.connect(USER, PASSWORD); ts.sendMessage(forward, forward.getAllRecipients()); folder.close(false); store.close(); ts.close(); System.out.println("message forwarded successfully...."); }
以上就是本文的全體內容,願望對年夜家進修javamail收發郵件的辦法有所贊助。