一、提前準備:
1.1準備第三方庫依賴javax.mail
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
1.2打開自己郵箱的pop3/stmp服務,並且設定相應的授權。
二、讀取郵箱裏面的信息:
方法步驟:
1.建立郵件會話、2.建立郵件存儲空間、3.連接到郵件服務器、4.打開郵件服務器中的制定文件夾
package tools;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
public class MailClientRecv {
private Session session;
private Store store;
private String username = "[email protected]";//郵箱賬號
private String password = "xxxxx";//郵箱授權密碼
private String popServer = "xxxxxxx";//郵件pop3服務器
public void init()throws Exception
{
//設置屬性
Properties props = new Properties();
props.put("mail.store.protocol", "pop3");
props.put("mail.imap.class", "com.sun.mail.imap.IMAPStore");
props.put("mail.pop3.class", "com.sun.mail.pop3.POP3Store");
// 創建Session對象
session = Session.getInstance(props,null);
session.setDebug(false); //輸出跟蹤日誌
// 創建Store對象
store = session.getStore("pop3");
//連接到收郵件服務器
store.connect(popServer,username,password);
}
public void receiveMessage()throws Exception
{
String folderName = "inbox";//獲取收件箱郵件
Folder folder=store.getFolder(folderName);
if(folder==null)
{
throw new Exception(folderName+"郵件夾不存在");
}
//打開信箱
folder.open(Folder.READ_ONLY);
System.out.println("您的收件箱有"+folder.getMessageCount()+"封郵件.");
System.out.println("您的收件箱有"+folder.getUnreadMessageCount()+"封未讀的郵件.");
//讀郵件
Message[] messages=folder.getMessages();
//for(int i=1;i<=messages.length;i++)
for(int i=1;i<=3;i++)
{
System.out.println("------第"+i+"封郵件-------");
//打印郵件信息
Message message = messages[i];
//folder.getMessage(i).writeTo(System.out);
System.out.println((message.getFrom())[0]);//發件人
System.out.println(message.getSubject());//標題
System.out.println();
}
folder.close(false); //關閉郵件夾
}
public void close()throws Exception
{
store.close();
}
public static void main(String[] args)throws Exception {
MailClientRecv client=new MailClientRecv();
//初始化
client.init();
//接收郵件
client.receiveMessage();
//關閉連接
client.close();
}
}
三、發送郵件
方法步驟
1.建立郵件會話,驗證賬號並且創建、2。創建發送協議、3.發送郵件
package tools;
import javax.mail.*;
import java.util.*;
import messages.*;
public class MailClientSend {
private Session session;
private Transport transport;
private String username = "xxxxxxxxx";//發件郵箱賬號
private String password = "xxxxx";//發件郵箱密碼
private String smtpServer = "xxxxxxxx";//郵箱的stmp服務器
public void init()throws Exception
{
//設置屬性
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
props.put("mail.smtp.host", smtpServer); //設置發送郵件服務器
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true"); //SMTP服務器需要身份驗證
// 創建Session對象
session = Session.getInstance(props,new Authenticator(){ //驗賬賬戶
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true); //輸出跟蹤日誌
// 創建Transport對象
transport = session.getTransport();
}
public void sendMessage()throws Exception{
//創建一個郵件
//Message msg = TextMessage.generate();
//Message msg = HtmlMessage.generate();
Message msg = AttachmentMessage.generate();
//發送郵件
transport.connect();
transport.sendMessage(msg, msg.getAllRecipients());
//打印結果
System.out.println("郵件已經成功發送");
}
public void close()throws Exception
{
transport.close();
}
public static void main(String[] args)throws Exception {
MailClientSend client=new MailClientSend();
//初始化
client.init();
//發送郵件
client.sendMessage();
//關閉連接
client.close();
}
}
3.1發送文本郵件:
package messages;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;
public class TextMessage {
public static MimeMessage generate() throws Exception {
String from = "xxxxx "; // 發件人地址
String to = "xxxxxx"; // 收件人地址
String subject = "test";
String body = "您好,這是來自一封chenliangyu的測試郵件";
// 創建Session實例對象
Session session = Session.getDefaultInstance(new Properties());
// 創建MimeMessage實例對象
MimeMessage message = new MimeMessage(session);
// 設置發件人
message.setFrom(new InternetAddress(from));
// 設置收件人
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 設置發送日期
message.setSentDate(new Date());
// 設置郵件主題
message.setSubject(subject);
// 設置純文本內容的郵件正文
message.setText(body);
// 保存並生成最終的郵件內容
message.saveChanges();
// 把MimeMessage對象中的內容寫入到文件中
//msg.writeTo(new FileOutputStream("e:/test.eml"));
return message;
}
}
3.2發送網頁郵件:
package messages;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;
public class HtmlMessage {
public static MimeMessage generate() throws Exception
{
String from = "xxxx "; // 發件人地址
String to = "xxxxxxxx"; // 收件人地址
String subject = "HTML郵件";
String body = "<a href=http://www.ecnu.edu.cn>"
+ "<h4>歡迎大家訪問我們的網站</h4></a></br>"
+ "<img src=\"https://news.ecnu.edu.cn/_upload/article/images/2e/e2/6b554d034c9192101208c732195e/16a6ec66-6729-4469-a5f4-0435e0f2e66a.jpg\">";
// 創建Session實例對象
Session session = Session.getDefaultInstance(new Properties());
// 創建MimeMessage實例對象
MimeMessage message = new MimeMessage(session);
// 設置發件人
message.setFrom(new InternetAddress(from));
// 設置收件人
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 設置發送日期
message.setSentDate(new Date());
// 設置郵件主題
message.setSubject(subject);
// 設置HTML格式的郵件正文
message.setContent(body, "text/html;charset=gb2312");
// 保存並生成最終的郵件內容
message.saveChanges();
// 把MimeMessage對象中的內容寫入到文件中
//msg.writeTo(new FileOutputStream("e:/HtmlMessage.eml"));
return message;
}
}
3.3發送附件郵件:
package messages;
import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class AttachmentMessage
{
public static MimeMessage generate() throws Exception
{
String from = "xxxxxx "; // 發件人地址
String to = "xxxxxxxx"; // 收件人地址
String subject = "多附件郵件"; //郵件主題
String body = "<a href=http://www.ecnu.edu.cn>" +
"歡迎大家訪問我們的網站</a></br>";
// 創建Session實例對象
Session session = Session.getDefaultInstance(new Properties());
// 創建MimeMessage實例對象
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject(subject);
//創建代表郵件正文和附件的各個MimeBodyPart對象
MimeBodyPart contentPart = createContent(body);
MimeBodyPart attachPart1 = createAttachment("c:/temp/ecnu4.jpg");
MimeBodyPart attachPart2 = createAttachment("c:/temp/ecnu5.jpg");
//創建用於組合郵件正文和附件的MimeMultipart對象
MimeMultipart allMultipart = new MimeMultipart("mixed");
allMultipart.addBodyPart(contentPart);
allMultipart.addBodyPart(attachPart1);
allMultipart.addBodyPart(attachPart2);
//設置整個郵件內容爲最終組合出的MimeMultipart對象
message.setContent(allMultipart);
message.saveChanges();
//message.writeTo(new FileOutputStream("e:/ComplexMessage.eml"));
return message;
}
public static MimeBodyPart createContent(String body) throws Exception
{
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body,"text/html;charset=gb2312");
return htmlBodyPart;
}
public static MimeBodyPart createAttachment(String filename) throws Exception
{
//創建保存附件的MimeBodyPart對象,並加入附件內容和相應信息
MimeBodyPart attachPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(filename);
attachPart.setDataHandler(new DataHandler(fds));
attachPart.setFileName(fds.getName());
return attachPart;
}
}
參考中國大學mooc《Java核心技術》