JavaMail操作的總結

  在整理網友的文章的時候,發現一個javamail的總結,特此謝謝the_east_key,並且公佈給大家,希望對大家有做幫助,全文如下:
本文章對:
發送普通郵件,接受普通郵件
發送帶有附件的郵件,接收帶有附件的郵件
發送html形式的郵件,接受html形式的郵件
[b[發送帶有圖片的郵件[/b]等做了一個總結。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
import java.io.*;
import javax.activation.*;


public String host="smtp.163.com";
public String username="abcdefg";
public String password="abcdefg";
public String mail_head_name="this is head of this mail";
public String mail_head_value="this is head of this mail";
public String mail_to="[email protected]";
public String mail_from="[email protected]";
public String mail_subject="this is the subject of this test mail";
public String mail_body="this is the mail_body of this test mail";
//此段代碼用來發送普通電子郵件
void jButton1_actionPerformed(ActionEvent e) {
try
{
Properties props = new Properties();//獲取系統環境
Authenticator auth = new Email_Autherticator();//進行郵件服務器用戶認證

props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth);
//設置session,和郵件服務器進行通訊。
MimeMessage message = new MimeMessage(session);
message.setContent("Hello","text/plain");//設置郵件格式
message.setSubject(mail_subject);//設置郵件主題
message.setText(mail_body);//設置郵件正文
message.setHeader(mail_head_name,mail_head_value);//設置郵件標題
message.setSentDate(new Date());//設置郵件發送日期

Address address = new InternetAddress(mail_from,"sunxiaoming");
message.setFrom(address); //設置郵件發送者的地址

//如果要對郵件發送者進行多個參數的設置,可以用以下語句
// Address address[] = {new InternetAddress("[email protected]","sunxmatoaklet"),new InternetAddress("[email protected]","sunxmathotmail")};
// message.addFrom(address);

Address toAddress = new InternetAddress(mail_to);//設置郵件接收方的地址
message.addRecipient(Message.RecipientType.TO,toAddress);
// Address ccAddress = new InternetAddress("[email protected]");//設置郵件抄送者的地址
// message.addRecipient(Message.RecipientType.CC,ccAddress);


Transport.send(message);//發送郵件
/* // to get a specific instance from the session for your protocol.pass along the username and password
// (blank if unnecessary).send the message,and close the connection;
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host,username,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
*/
System.out.println("send ok!");
}
catch(Exception ex)
{
System.out.println("faild"+ex);
}
}

 //此段代碼用來進行服務器對用戶的認證
public class Email_Autherticator extends Authenticator
{
public Email_Autherticator()
{
super();
}
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username,password);
}
}
//該程序為接收郵件
void jButton2_actionPerformed(ActionEvent e) {
try
{
Properties props = System.getProperties(); //獲取系統變量
Authenticator auth = new Email_Autherticator();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth); //建立session
Store store = session.getStore("pop3");
store.connect(host,username,password);

//After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
Folder folder = store.getFolder("INBOX");//連接到Store後,取得一個文件夾,一般默認的是INDEX
folder.open(Folder.READ_WRITE);//READ_ONLY為打開方式
Message message[] = folder.getMessages();//從文件夾獲取郵件信息

//可以用兩種方式去獲得郵件信息,getContent()用來獲得郵件的主體信息。而WriteTo()可以用來獲得郵件的全部信息,包括頭部信息
// System.out.println(((MimeMessage)message).getContent());
for (int i=0,n=message.length;i {

String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
System.out.println("From:"+out_from_person+" ");
System.out.println("Address:"+out_from_address+" ");

String out_subject = message[i].getSubject();
System.out.println("Subject:"+out_subject+" ");

//以下代碼用來獲得郵件的正文信息
Part messagePart = message[i];
Object out_content = messagePart.getContent();
if (out_content instanceof Multipart)
{
messagePart = ((Multipart)out_content).getBodyPart(0);
System.out.println("[ Multipart Message ]");
}
String out_content_type = messagePart.getContentType();
System.out.println("CONTENT:"+out_content_type);

if (out_content_type.startsWith("text/plain") | | out_content_type.startsWith("text/html"))
{
InputStream ipstm = messagePart.getInputStream();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
String thisLine = bufreader.readLine();
while (thisLine != null)
{
System.out.println("thisLine: "+thisLine);
thisLine = bufreader.readLine();
}
}
System.out.println("------------------------------------------------------------");
message[i].setFlag(Flags.Flag.DELETED,true);//最後刪除服務器端的郵件
}
//DELETED,ANSWERED,DRAFT,FLAGGED,RECENT,SEEN,USER
folder.close(true);//true的話,徹底刪除已經標記為DELETE的郵件,如果為false的話,就不刪除
store.close();//關閉
}
catch(Exception ej2)
{
System.out.println(ej2);
}
}

void jButton4_actionPerformed(ActionEvent e) {
try
{//該程序為回復郵件
Properties props = System.getProperties(); //獲取系統變量
Authenticator auth = new Email_Autherticator(); //取得?uFFFD衿魅現?
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth); //建立session
Store store = session.getStore("pop3");
store.connect(host,username,password);

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();

for (int i=0,n=message.length;i {
// String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();//獲取郵件發信人的署名

String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
System.out.println(out_from_address);

Message forward = new MimeMessage(session);
forward.setSubject("Fwd:"+message[i].getSubject());
forward.setFrom(new InternetAddress(mail_to));
forward.addRecipient(Message.RecipientType.TO,new InternetAddress(out_from_address));

BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Here you go with the original message: ");

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);

messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(message[i].getDataHandler());

multipart.addBodyPart(messageBodyPart);
forward.setContent(multipart);

Transport.send(forward);
message[i].setFlag(Flags.Flag.DELETED,true);//DELETED,ANSWERED,DRAFT,FLAGGED,RECENT,SEEN,USER
}
folder.close(true);
store.close();//關閉
}
catch(Exception ej2)
{
System.out.println(ej2);
}

}

void jButton5_actionPerformed(ActionEvent e) {
try
{
Properties props = new Properties();
Authenticator auth = new Email_Autherticator();

props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth);
MimeMessage message = new MimeMessage(session);
message.setContent("Hello","text/plain");
message.setSubject(mail_subject);
message.setText(mail_body);
message.setHeader(mail_head_name,mail_head_value);
message.setSentDate(new Date());
message.setFrom(new InternetAddress(mail_from,"sunxiaoming")); //to signal man   //原理:可以將郵件看成有多個部分組成的,如正文是一個部分,附件也是一個部分,所以用BodyPart來設置郵件的格式
message.addRecipient(Message.RecipientType.TO,new InternetAddress(mail_to));
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Pardon Ideas");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);

messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("./20020423/test.zip");//此處設置郵件的附件
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("test.zip");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("send ok!");
}
catch(Exception ex)
{
System.out.println("faild"+ex);
}

}
//此段代碼用來發送帶有附件的郵件
void jButton6_actionPerformed(ActionEvent e) {
try
{
Properties props = System.getProperties();
Authenticator auth = new Email_Autherticator();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth); //建立session
Store store = session.getStore("pop3");
store.connect(host,username,password);

//After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();

for (int i=0,n=message.length;i {
//獲得郵件的部分信息,如頭部信息,送信人的署名,送信人的郵件地址
String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
System.out.println("From:"+out_from_person+" ");
System.out.println("Address:"+out_from_address+" ");
String out_subject = message[i].getSubject();
System.out.println("Subject:"+out_subject+" ");

//以下代碼用來獲取郵件的主體信息
Part messagePart = message[i];
Object out_content = messagePart.getContent();
if (out_content instanceof Multipart)
{
messagePart = ((Multipart)out_content).getBodyPart(0);
System.out.println("[ Multipart Message ]");
}
String out_content_type = messagePart.getContentType();
System.out.println("CONTENT:"+out_content_type);

if (out_content_type.startsWith("text/plain") | | out_content_type.startsWith("text/html"))
{
InputStream ipstm = messagePart.getInputStream();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
String thisLine = bufreader.readLine();
while (thisLine != null)
{
System.out.println("thisLine: "+thisLine);
thisLine = bufreader.readLine();
}
}
//獲取附件
Multipart mp = (Multipart)message[i].getContent();
for (int j=0,m=mp.getCount();j {
System.out.println("***"+m+"***");
Part part = mp.getBodyPart(j);
String disposition = part.getDisposition();
if ((disposition != null) && ((disposition.equals(part.ATTACHMENT)) | | (disposition.equals(part.INLINE))))
{

//以下代碼將獲得的附件保存到當前目錄下,以part.getFileName()為文件名,也既是附件的名稱。
File filename = new File(part.getFileName());
for (int k=0;filename.exists();k++)
{
filename = new File(part.getFileName()+k);
}
FileOutputStream myFileoutputstream = new FileOutputStream(filename);
int chunk = part.getSize();//獲得附件的大小,不一定很準確。

byte [] buffer = new byte[chunk];
InputStream instream = part.getInputStream();
instream.read(buffer,0,chunk);
myFileoutputstream.write(buffer,0,chunk);
instream.close();
myFileoutputstream.close();
}
}
System.out.println("------------------------------------------------------------");
message[i].setFlag(Flags.Flag.DELETED,true);
}
folder.close(true);
store.close();//關閉
}
catch(Exception ej2)
{
System.out.println(ej2);
}
}  //此段代碼用來發送帶有html信息的郵件
void jButton8_actionPerformed(ActionEvent e) {
try
{
Properties props = new Properties();
Authenticator auth = new Email_Autherticator();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth);
MimeMessage message = new MimeMessage(session);
//設置郵件正文
String htmltext="< h1>hello< /h1>"+"< a href="http://www.sina.com.cn" target="_blank">click me please!< /a>";
message.setContent(htmltext,"text/html");//text/plain設置郵件的格式因為是帶有html文檔的,所以用text/html格式

message.setSubject(mail_subject);
// message.setText(mail_body);在使用message.setContent()時候,好像不能用message.setText()
message.setHeader(mail_head_name,mail_head_value);
message.setSentDate(new Date());
Address address = new InternetAddress(mail_from,"sunxiaoming");
message.setFrom(address);
Address toAddress = new InternetAddress(mail_to);
message.addRecipient(Message.RecipientType.TO,toAddress);
Transport.send(message);
System.out.println("send ok!");
}
catch(Exception ex)
{
System.out.println("faild"+ex);
}

}

//此段代碼用來發送帶有圖片的郵件
void jButton9_actionPerformed(ActionEvent e) {
try
{
String file = "./20020423/test.gif";
Properties props = new Properties();
Authenticator auth = new Email_Autherticator();

props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth);
MimeMessage message = new MimeMessage(session);

message.setSubject("Embedded Image");
Address address = new InternetAddress(mail_from,"sunxiaoming");
message.setFrom(address);
Address toAddress = new InternetAddress(mail_to);
message.addRecipient(Message.RecipientType.TO,toAddress);
message.setHeader(mail_head_name,mail_head_value);
message.setSentDate(new Date());

BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "< h1>< /h1>"+"< img src="cid:memememe">";//加入圖片
messageBodyPart.setContent(htmlText,"text/html");
//原理同發送附件一樣,將郵件看成有多個部分組成的,先設置每一個部分,然後再全部將它們合起來即可。
//Create a related multi-part to combine the parts
MimeMultipart multipart = new MimeMultipart("related");
multipart.addBodyPart(messageBodyPart);

//Create part for the image
messageBodyPart = new MimeBodyPart();

//Fetch the image and associate to part
DataSource fds = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID","memememe");

//Add part to multi-part
multipart.addBodyPart(messageBodyPart);

//Associate multi-part with message
message.setContent(multipart);

Transport.send(message);
System.out.println("send ok!");
}
catch(Exception ex)
{
System.out.println("faild"+ex);
}

}

//該程序用來接受帶有html信息的郵件
void jButton7_actionPerformed(ActionEvent e) {
try
{
Properties props = System.getProperties();
Authenticator auth = new Email_Autherticator();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth);
Store store = session.getStore("pop3");
store.connect(host,username,password);

//After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();

for (int i=0,n=message.length;i // for (int i=0,n=1;i {
String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
System.out.println("From:"+out_from_person+" ");
System.out.println("Address:"+out_from_address+" ");

String out_subject = message[i].getSubject();
System.out.println("Subject:"+out_subject+" ");

//獲取郵件的信息,並且對其每一部分進行操作
Part messagePart = message[i];
Object out_content = messagePart.getContent();
if (out_content instanceof Multipart)
{
messagePart = ((Multipart)out_content).getBodyPart(0);
System.out.println("[ Multipart Message ]");
}
String out_content_type = messagePart.getContentType();
System.out.println("CONTENT:"+out_content_type);

jEditorPane1.setText("");//將其顯示在jEditorPanel上
jEditorPane1.setContentType("text/html");
jEditorPane1.setText((String)out_content);
jEditorPane1.setEditable(false);

/*
if (out_content_type.startsWith("text/plain") | | out_content_type.startsWith("text/html"))
{
InputStream ipstm = messagePart.getInputStream();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
String thisLine = bufreader.readLine();
while (thisLine != null)
{
System.out.println("thisLine: "+thisLine);
thisLine = bufreader.readLine();
}
}
*/
System.out.println("------------------------------------------------------------");
message[i].setFlag(Flags.Flag.DELETED,true);
}
folder.close(true);
store.close();
}
catch(Exception ej2)
{
System.out.println(ej2);
}

} /該程序用來接受帶有html信息的郵件
void jButton7_actionPerformed(ActionEvent e) {
try
{
Properties props = System.getProperties();
Authenticator auth = new Email_Autherticator();
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(props,auth);
Store store = session.getStore("pop3");
store.connect(host,username,password);

//After connecting to the Store,you can get a Folder,which must be opened before you can read messages from it:
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();

for (int i=0,n=message.length;i // for (int i=0,n=1;i {
String out_from_person = ((InternetAddress)message[i].getFrom()[0]).getPersonal();
String out_from_address = ((InternetAddress)message[i].getFrom()[0]).getAddress();
System.out.println("From:"+out_from_person+" ");
System.out.println("Address:"+out_from_address+" ");

String out_subject = message[i].getSubject();
System.out.println("Subject:"+out_subject+" ");

//獲取郵件的信息,並且對其每一部分進行操作
Part messagePart = message[i];
Object out_content = messagePart.getContent();
if (out_content instanceof Multipart)
{
messagePart = ((Multipart)out_content).getBodyPart(0);
System.out.println("[ Multipart Message ]");
}
String out_content_type = messagePart.getContentType();
System.out.println("CONTENT:"+out_content_type);

jEditorPane1.setText("");//將其顯示在jEditorPanel上
jEditorPane1.setContentType("text/html");
jEditorPane1.setText((String)out_content);
jEditorPane1.setEditable(false);

/*
if (out_content_type.startsWith("text/plain") | | out_content_type.startsWith("text/html"))
{
InputStream ipstm = messagePart.getInputStream();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(ipstm));
String thisLine = bufreader.readLine();
while (thisLine != null)
{
System.out.println("thisLine: "+thisLine);
thisLine = bufreader.readLine();
}
}
*/
System.out.println("------------------------------------------------------------");
message[i].setFlag(Flags.Flag.DELETED,true);
}
folder.close(true);
store.close();
}
catch(Exception ej2)
{
System.out.println(ej2);
}

}

對於上述代碼均經過運行通過,
如果不行,可在JBUILDER中進行運行,
再次感謝JAVA中文技術網! 
發佈了25 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章