事先说明:
没用过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("xxf@cafe.com"); //收件人邮箱地址
(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="xyz@163.com";
public String mail_from="abcdefg@163.com";
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("sunxm@oaklet.co.jp","sunxmatoaklet"),new InternetAddress("firstsxm@hotmail.com","sunxmathotmail")};
// message.addFrom(address);
Address toAddress = new InternetAddress(mail_to);//设置邮件接收方的地址
message.addRecipient(Message.RecipientType.TO,toAddress);
// Address ccAddress = new InternetAddress("firstsxm@hotmail.com");//设置邮件抄送者的地址
// 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("dujiang@sricnet.com");
sendmail.setFrom("du_jiang@sohu.com");
sendmail.setSubject("你好,这是测试!");
sendmail.setContent("你好这是一个带多附件的测试!");
//Mail sendmail = new Mail("dujiang@sricnet.com","du_jiang@sohu.com","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();
}
}
}