事先说明: 没用过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(); } } }