Java---發郵件
阿新 • • 發佈:2018-12-12
E-Mail協議簡介
- 郵件伺服器,按照提供的服務型別,可以分為傳送郵件的伺服器我接收郵件的伺服器。
- 傳送郵件的伺服器使用傳送協議,現在常用的是SMTP協議。所以,通常發郵件的伺服器也稱為SMTP伺服器。
- 接收郵件的伺服器使用接收協議,現在常用的是POP3協議或IMAP協議,所以通常也被稱為POP3或IMAP伺服器。
- 目前經常見到的伺服器為SMTP和POP3伺服器。如大家在註冊了126的郵箱之後,它的發郵件伺服器為smtp.126.com:25,而收郵件伺服器則為pop3.126.com:110.(冒號後面的為埠號)。
- 當然,發郵件伺服器和收郵件伺服器也可能是同一臺主機,但埠號一定不相同。預設發郵件伺服器的埠為
郵件傳送的工作圖
Java程式發郵件
JavaMail-API簡介
- 郵件客戶端的主要任務是向郵件伺服器傳送郵件,以及接收來自郵件伺服器的郵件。
- Sun公司制定了一套API,它封裝了郵件通訊的各種協議。為Java開發者提供了收發電子郵件的公共介面。
技術入口:Javax.mail.Session
- Session -用於設定伺服器,協議型別和密碼等
表示會話,是JavaMailApi的最高層入口類。Session對像從Properties中獲取資訊,如IP、協議、使用者名稱密碼等。
- Javax.mail.Message類,它的一個重要子類為MimeMessage
Message類表示電子郵件的正文部分。
一封電子郵件包含以下內容:
地址資訊、標題、日期、正文。
- Java.mail.Address:收件人地址
表示郵件的地址。常用的子類為:javax.mail.internet.InternetAddress.
- Javax.mail.Transport:負責傳送郵件
指定郵件傳送的協議。通常為SMTP.
它的靜態方法send(Message)負責傳送郵件。
準備
mail.jar,activation.jar.兩個jar包,找不到可以下載本例完整程式碼,專案中lib目錄中有。
程式碼演示
傳送純文字郵件
@Test
public void demo1() throws Exception {
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "SMTP"); //設定郵件傳送協議
p.setProperty("mail.smtp.host", "smtp.163.com"); //設定郵件伺服器
p.setProperty("mail.smtp.port", "25"); //設定傳送郵件的埠號,預設 25
p.setProperty("mail.smtp.auth", "true"); // 登入認證為true
p.setProperty("mail.smtp.timeout","1000"); //設定超時時間
//技術入口:
Session mailSession = Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
String username = " [email protected]"; //郵箱賬號 [email protected]
String password = "xxx"; //密碼
return new PasswordAuthentication( username, password );
}
});
mailSession.setDebug(true); //開啟debug模式
//////////////下面開始進行郵件資訊的封裝//////////////
//1 建立郵件物件,並且設定 由 mailSession 使用者進行傳送郵件
Message message = new MimeMessage(mailSession);
//2 設定郵件傳送者
message.setFrom( new InternetAddress("[email protected]") );
//3 設定郵件接收者
message.setRecipient( RecipientType.TO, new InternetAddress("[email protected]"));
//4 設定郵件主題
message.setSubject("測試一下");
//5 設定郵件內容
message.setContent("Hello world! 你好!","text/html;charset=utf-8");
//傳送!!!
Transport.send(message);
}
傳送帶附件的郵件
@Test
public void demo2() throws Exception {
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "SMTP"); //設定郵件傳送協議
p.setProperty("mail.smtp.host", "smtp.163.com"); //設定郵件伺服器
p.setProperty("mail.smtp.port", "25"); //設定傳送郵件的埠號,預設 25
p.setProperty("mail.smtp.auth", "true"); // 登入認證為true
p.setProperty("mail.smtp.timeout","1000"); //設定超時時間
//技術入口:
Session mailSession = Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
String username = "[email protected]"; //郵箱賬號 [email protected]
String password = "xxx"; //密碼
return new PasswordAuthentication( username, password );
}
});
mailSession.setDebug(true); //開啟debug模式
//////////////下面開始進行郵件資訊的封裝//////////////
//1 建立郵件物件,並且設定 由 mailSession 使用者進行傳送郵件
Message message = new MimeMessage(mailSession);
//2 設定郵件傳送者
message.setFrom( new InternetAddress("[email protected]") );
//3 設定郵件接收者
message.setRecipient( RecipientType.TO, new InternetAddress("[email protected]"));
//4 設定郵件主題
message.setSubject("福利");
///////////////////下面是開始變化的部分///////////////////////
// //5 設定郵件內容
// message.setContent("Hello world! 你好!","text/html;charset=utf-8");
//第一部分
MimeBodyPart bodyPart1 = new MimeBodyPart();
bodyPart1.setContent("<h1>福利</h1>","text/html;charset=utf-8");
//第二部分
MimeBodyPart bodyPart2 = new MimeBodyPart();
bodyPart2.setDataHandler( new DataHandler( new FileDataSource("./imgs/1.jpg" ) ) );
bodyPart2.setFileName(MimeUtility.encodeText("美女1.gif"));
//第三部分
MimeBodyPart bodyPart3 = new MimeBodyPart();
bodyPart3.setDataHandler( new DataHandler( new FileDataSource("./imgs/2.jpg" ) ) );
bodyPart3.setFileName(MimeUtility.encodeText("美女2.gif"));
//按順序加入到 Multipart 中
Multipart mp = new MimeMultipart();
mp.addBodyPart(bodyPart1);
mp.addBodyPart(bodyPart2);
mp.addBodyPart(bodyPart3);
//把mp設定為 message 的內容
message.setContent(mp); //技術入口
/////////////////////////////////////////////////////
//傳送!!!
Transport.send(message);
}