JavaMail的常用类介绍

事先说明: 
没用过JavaMail的人可能看不懂这些介绍,不过不要紧,后面的文章有具体的实例,到时也可倒回来查看这些类的用法.
(1) javax.mail.Properties类 
  JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机. 
用法: 
    Properties props = new Properties ();  //Properties props = System.getProperties();
   props.put("mail.smtp.host", "smtp.163.com");//可以换上你的smtp主机名。 
(2) javax.mail.Session类 
  这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中, Session对象需要知道用来处理邮件的SMTP 服务器。 
用法: 
   Session sendMailSession = Session.getInstance(props, null);   //不须认证
(3) javax.mail.Transport类 
  邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和Store. Transport 是用来发送信息的,而Store用来收邮件。在这发送邮件我们只需要用到Transport对象。 
用法: 
    Transport  transport = sendMailSession.getTransport("smtp"); 
  用JavaMail Session对象的getTransport 方法来初始化Transport。传过去的字符串申明了对象所要使用的协议,如"smtp"。这将为我们省了很多时间。因为JavaMail以经内置了很多协议的实现方法。 
 注意: JavaMail并不是绝对支持每一个协议,目前支持IMAP、 SMTP和 POP3. 
(4) javax.mail.MimeMessage类 
  Message对象将存储我们实际发送的电子邮件信息,Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。 
  用法: 
    Message newMessage = new MimeMessage(sendMailSession); 
(5) javax.mail.InternetAddress类 
一旦您创建了 Session 和 Message,并将内容填入消息后,就可以用Address确定信件地址了。和 Message 一样,Address 也是个抽象类。您用的是Javax.mail.internet.InternetAddress 类. 
用法: 
    InternetAddress from=new InternetAddress("[email protected]");   //收件人邮箱地址
(6) javax.mail.Store类 
Store类实现特定邮件协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。 
用法: 
    Store store=s.getSorte("pop3");  //s为一个邮件会话 
    store.connect(popserver,username,password);//通过你提供的popserver地址(邮箱服务器),用户名和密码登录你的邮箱  
(7) javax.mail.Folder类 
Folder类用于分级组织邮件,并提供照Javax.mail.Message格式访问email的能力。 
用法: 
    Folder folder=store.getFolder("INBOX"); 
    folder.open(Folder.READ_ONLY); 
(8) javax.mail.Internet.MimeMultipart 
一般保存电子邮件内容的容器是Multipart抽象类,它定义了增加和删除及获得电子邮件不同部分内容的方法.由于Multipart是抽象类,我们必须为它使用一个具体的子类,JavaMail API提供javax.mail.Internet.MimeMultpart类来使用MimeMessage对象. 
用法: 
    MimeMultipart multipart=new MimeMultipart(); 
注:我们使用MimeMultipart对象的一个方法是addBodyPart(),它在我们的电子邮件内容里添加BodyPart(BodyPart类在下面紧接着要介绍)对象.消息可以有很多部分,一个BodyPart可以代表一个部分. 
(9) javax.mail.Internet.MimeBodyPart类 
MimeBodyPart是BodyPart具体用于mimeMessage的一个子类. 
MimeBodyPart对象代表一个MimeMessage对象内容的一部分.每个MimeBodyPart被认为有两部分: 
⊙一个MIME类型 
⊙匹配这个类型的内容 
用法: 
    MimeBodyPart mdp=new MimeBodyPart(); 
    String text="Hello JavaMail!"; 
//定义MIME类型为text/plain,并设置MimeBodyPart的内容. 
    mdp.setContent(text,"text/plain");  
(10) javax.activation.DataHandler类(包含在JAF中) 
JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的.JavaMail API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法. 
用法: 
    DataHandler dh=new DataHandler(text,type); 
    mdp.setDatahandler(dh);  //mdp是一个MimeBodyPart对象 
(11) javax.activation.FileDataSource类(包含在JAF中) 
一个FileDataSource对象可以表示本地文件和服务器可以直接访问的资源.一个本地文件可以通过创建一个新的MimeBodyPart对象附在一个mimeMessage对象上. 
用法: 
    MimeMultipart mm=new MimeMultipart(); 
    MimeBodyPart mdp=new MimeBodyPart(); 
    FileDataSource fds=new FileDataSource("c:/exam.txt"); 
    mdp.setDataHandler(new DataHandler(fds));   //设置数据源 
    mm.addBodyPart(mdp);  //为当前消息MimeMultipart对象增加MimeBodyPart 
(12) javax.activation.URLDataSource类(包含在JAF中) 
远程资源,URL不会指向它们,由一个URLDataSource对象表示.一个远程资源可以通过创建一个新mimeBodyPart对象附在一个mimeMessage对象上(同FileDataSource差不多). 

用法: 
与FileDataSource唯一不同的是数据源的设置: 
    URLDataSource uds=new URLDataSource("http://www.cnjsp.com/logo.gif") 
/*******************************************************************/

在整理网友的文章的时候,发现一个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_headvalue="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<n;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<n;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<n;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<m;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><hello></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<n;i++) 
// for (int i=0,n=1;i<n;i++)//only one letter received from inbox //for debug 
{ 
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); 
} 

}
 
/*******************************************/
JavaMail能很好的支持中文,但在测试过程中发现使用JavaMail发带有中文文件名的
附件时,文件名是乱码,经测试与查看源文件发现,是在JavaMail包里的一个写邮件
的方法没有考虑国际化因素,对双字节或多字节的字符没有考虑。即在
com.sun.mail.util.LineOutputStream调用
com.sun.mail.util.ASCIIUtility.getBytes(String s);
此方法直接将字符串转化成字符然后转换成字节。其实在String类里的getBytes()
方法就直接可以按照系统缺省的编码正确转换成字节码。
解决方法:将com.sun.mail.util.LineOutputStream中调用ASCIIUtility.getBytes(String s);
方法的部分改为s.getBytes()解决了此问题。
用重新编译好的LineOutputStream.class文件替换javamail里的Com/sun/mail/util/LineOutputStream.class文件即可 

/********************************************************/
[JAVA100例]047、使用JavaMail发送邮件
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

/**
 * <p>Title: 使用javamail发送邮件</p>
 * <p>Description: 演示如何使用javamail包发送电子邮件。这个实例可发送多附件</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: Mail.java</p>
 * @version 1.0
 */
public class Mail {

String to = "";//收件人
String from = "";//发件人
String host = "";//smtp主机
String username = "" ;
String password = "" ;
String filename = "";//附件文件名
String subject = "";//邮件主题
String content = "";//邮件正文
Vector file = new Vector();//附件文件集合
/**
 *<br>方法说明:默认构造器
 *<br>输入参数:
 *<br>返回类型:
 */
public Mail(){
}
/**
 *<br>方法说明:构造器,提供直接的参数传入
 *<br>输入参数:
 *<br>返回类型:
 */
public Mail(String to,String from,String smtpServer,String username,String password,String subject,String content){
  this.to = to;
  this.from = from;
  this.host = smtpServer;
  this.username = username;
  this.password = password;
  this.subject = subject;
  this.content = content;
}
/**
 *<br>方法说明:设置邮件服务器地址
 *<br>输入参数:String host 邮件服务器地址名称
 *<br>返回类型:
 */
public void setHost(String host){
  this.host = host;
}
/**
 *<br>方法说明:设置登录服务器校验密码
 *<br>输入参数:
 *<br>返回类型:
 */
public void setPassWord(String pwd){
  this.password = pwd;
}
/**
 *<br>方法说明:设置登录服务器校验用户
 *<br>输入参数:
 *<br>返回类型:
 */
public void setUserName(String usn){
  this.username = usn;
}
/**
 *<br>方法说明:设置邮件发送目的邮箱
 *<br>输入参数:
 *<br>返回类型:
 */
public void setTo(String to){
  this.to = to;
}
/**
 *<br>方法说明:设置邮件发送源邮箱
 *<br>输入参数:
 *<br>返回类型:
 */
public void setFrom(String from){
  this.from = from;
}
/**
 *<br>方法说明:设置邮件主题
 *<br>输入参数:
 *<br>返回类型:
 */
public void setSubject(String subject){
  this.subject = subject;
}
/**
 *<br>方法说明:设置邮件内容
 *<br>输入参数:
 *<br>返回类型:
 */
public void setContent(String content){
  this.content = content;
}
/**
 *<br>方法说明:把主题转换为中文
 *<br>输入参数:String strText 
 *<br>返回类型:
 */
public String transferChinese(String strText){
  try{
    strText = MimeUtility.encodeText(new String(strText.getBytes(), "GB2312"), "GB2312", "B");
  }catch(Exception e){
    e.printStackTrace();
  }
  return strText;
}
/**
 *<br>方法说明:往附件组合中添加附件
 *<br>输入参数:
 *<br>返回类型:
 */
public void attachfile(String fname){
  file.addElement(fname);
}
/**
 *<br>方法说明:发送邮件
 *<br>输入参数:
 *<br>返回类型:boolean 成功为true,反之为false
 */
public boolean sendMail(){

  //构造mail session
  Properties props = System.getProperties();
  props.put("mail.smtp.host",host);
  props.put("mail.smtp.auth","true");
  Session session=Session.getDefaultInstance(props, new Authenticator(){
   public PasswordAuthentication getPasswordAuthentication(){
    return new PasswordAuthentication(username,password); 
   }
  });
  
  try {
    //构造MimeMessage 并设定基本的值
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from));
    InternetAddress[] address={new InternetAddress(to)};
    msg.setRecipients(Message.RecipientType.TO,address);
    subject = transferChinese(subject);
    msg.setSubject(subject);
    
    //构造Multipart
    Multipart mp = new MimeMultipart();
    
    //向Multipart添加正文
    MimeBodyPart mbpContent = new MimeBodyPart();
    mbpContent.setText(content);
    //向MimeMessage添加(Multipart代表正文)
    mp.addBodyPart(mbpContent);
    
    //向Multipart添加附件
    Enumeration efile=file.elements();
    while(efile.hasMoreElements()){
    
      MimeBodyPart mbpFile = new MimeBodyPart();
      filename=efile.nextElement().toString();
      FileDataSource fds = new FileDataSource(filename);
      mbpFile.setDataHandler(new DataHandler(fds));
      mbpFile.setFileName(fds.getName());
      //向MimeMessage添加(Multipart代表附件)
      mp.addBodyPart(mbpFile);

    }
    
    file.removeAllElements();
    //向Multipart添加MimeMessage
    msg.setContent(mp);
    msg.setSentDate(new Date());
    //发送邮件
    Transport.send(msg);
  
  } catch (MessagingException mex) {
    mex.printStackTrace();
    Exception ex = null;
    if ((ex=mex.getNextException())!=null){
      ex.printStackTrace();
    }
    return false;
  }
  return true;
 }
/**
 *<br>方法说明:主方法,用于测试
 *<br>输入参数:
 *<br>返回类型:
 */
 public static void main(String[] args){
  Mail sendmail = new Mail();
  sendmail.setHost("smtp.sohu.com");
  sendmail.setUserName("du_jiang");
  sendmail.setPassWord("31415926");
  sendmail.setTo("[email protected]");
  sendmail.setFrom("[email protected]");
  sendmail.setSubject("你好,这是测试!");
  sendmail.setContent("你好这是一个带多附件的测试!"); 
  //Mail sendmail = new Mail("[email protected]","[email protected]","smtp.sohu.com","du_jiang","31415926","你好","胃,你好吗?");
  sendmail.attachfile("c:\test.txt");
  sendmail.attachfile("DND.jar");
  sendmail.sendMail();

 }
}//end
/**********************************************/
[JAVA100例]048、使用JavaMail接收邮件
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;
/**
 * <p>Title: 使用JavaMail接收邮件</p>
 * <p>Description: 实例JavaMail包接收邮件,本实例没有实现接收邮件的附件。</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: POPMail.java</p>
 * @version 1.0
 */
public class POPMail{
/**
 *<br>方法说明:主方法,接收用户输入的邮箱服务器、用户名和密码
 *<br>输入参数:
 *<br>返回类型:
 */
    public static void main(String args[]){
        try{
            String popServer=args[0];
            String popUser=args[1];
            String popPassword=args[2];
            receive(popServer, popUser, popPassword);
        }catch (Exception ex){
            System.out.println("Usage: java com.lotontech.mail.POPMail"+" popServer popUser popPassword");
        }
        System.exit(0);
    } 
/**
 *<br>方法说明:接收邮件信息
 *<br>输入参数:
 *<br>返回类型:
 */
    public static void receive(String popServer, String popUser, String popPassword){
        Store store=null;
        Folder folder=null;
        try{
            //获取默认会话
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            //使用POP3会话机制,连接服务器
            store = session.getStore("pop3");
            store.connect(popServer, popUser, popPassword);
            //获取默认文件夹
            folder = store.getDefaultFolder();
            if (folder == null) throw new Exception("No default folder");
            //如果是收件箱
            folder = folder.getFolder("INBOX");
            if (folder == null) throw new Exception("No POP3 INBOX");
            //使用只读方式打开收件箱
            folder.open(Folder.READ_ONLY);
            //得到文件夹信息,获取邮件列表
            Message[] msgs = folder.getMessages();
            for (int msgNum = 0; msgNum < msgs.length; msgNum++){
                printMessage(msgs[msgNum]);
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        finally{
        //释放资源
            try{
                if (folder!=null) folder.close(false);
                if (store!=null) store.close();
            }catch (Exception ex2) {
                ex2.printStackTrace();
            }
        }
    }
/**
 *<br>方法说明:打印邮件信息
 *<br>输入参数:Message message 信息对象
 *<br>返回类型:
 */
    public static void printMessage(Message message){
        try{
            //获得发送邮件地址
            String from=((InternetAddress)message.getFrom()[0]).getPersonal();
            if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress();
            System.out.println("FROM: "+from);
            //获取主题
            String subject=message.getSubject();
            System.out.println("SUBJECT: "+subject);
            //获取信息对象
            Part messagePart=message;
            Object content=messagePart.getContent();
            //附件
            if (content instanceof Multipart){
                messagePart=((Multipart)content).getBodyPart(0);
                System.out.println("[ Multipart Message ]");
            }
            //获取content类型
            String contentType=messagePart.getContentType();
            //如果邮件内容是纯文本或者是HTML,那么打印出信息
            System.out.println("CONTENT:"+contentType);
            if (contentType.startsWith("text/plain")||
                contentType.startsWith("text/html")){
                InputStream is = messagePart.getInputStream();
                BufferedReader reader=new BufferedReader(new InputStreamReader(is));
                String thisLine=reader.readLine();
                while (thisLine!=null){
                    System.out.println(thisLine);
                    thisLine=reader.readLine();
                }
            }
            System.out.println("-------------- END ---------------");
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
} 

 

你可能感兴趣的:(html,应用服务器,swing,J#,sun)