package com.test.mail;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.*;
/**
 *收发邮件
 *@author aa
 *@version jdk1.4.1 tomcat5.1.0
 */public class MailBean {
/**MIME邮件对象*/
private MimeMessage mimeMsg=null;/**邮件会话对象*/
private Session mailSession=null;
/**Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象*/
private Multipart mp=null;/**
 *构造函数,初始化
 */
public MailBean() {
}    /**
     * 发件初始化
     *
     */
public void init() {
try {
Properties props = System.getProperties();       //获得系统属性对象 
//props.put("mail.smtp.port","25");
props.put("mail.smtp.auth", "true");
mailSession = Session.getInstance(props, null);  //获得邮件会话对象 
mimeMsg = new MimeMessage(mailSession);          //创建MIME邮件对象 
mp = new MimeMultipart();
} catch (Exception e) {
e.printStackTrace();
}
}/**
 *设置主题
 *@param mailSubject 主题
 *@return  返回设置主题是否成功,成功则true,否则false
 */
public boolean setSubject(String mailSubject) {
try {
mimeMsg.setSubject(mailSubject);
return true;
} catch (Exception e) {
return false;
}
}/**
 *设置主体
 *@param mailBody 主体
 *@return  返回设置主体是否成功,成功则true,否则false
 */
public boolean setBody(String mailBody) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent(
"<meta http-equiv=Content-Type content=text/html;charset=gb2312>"
+ mailBody,
"text/html;charset=gb2312");
mp.addBodyPart(bp);
return true;
} catch (Exception e) {
return false;
}
}/**
 *添加附件
 *@param filename 附件地址
 *@return  返回添加附件是否成功,成功则true,否则false
 */
public boolean addAttach(String filename) {
try {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
return true;
} catch (Exception e) {
return false;
}
}/**
 *设置发件人
 *@param from 发件人
 *@return  返回设置发件人是否成功,成功则true,否则false
 */
public boolean setFrom(String from) {
try {
mimeMsg.setFrom(new InternetAddress(from)); //设置发信人 
return true;
} catch (Exception e) {
return false;
}
}/**
 *设置收件人
 *@param to 收件人
 *@return  返回设置收件人是否成功,成功则true,否则false
 */
public boolean setTo(String to) {
try {
mimeMsg.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse(to));
return true;
} catch (Exception e) {
return false;
}
}/**
 *设置收件人
 *@param copyto 收件人
 *@return  返回设置收件人是否成功,成功则true,否则false
 */
public boolean setCopyTo(String copyto) {
try {
mimeMsg.setRecipients(
Message.RecipientType.CC,
(Address[]) InternetAddress.parse(copyto));
return true;
} catch (Exception e) {
return false;
}
}    /**
 *发件操作
     * @param smtpServer
     * @param smtpUser
     * @param smtpPassword
     * @return 返回发送成功信息
     */
public String send(String smtpServer,String smtpUser,String smtpPassword) {
String str = null;
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
Transport transport = mailSession.getTransport("smtp");
transport.connect(smtpServer,smtpUser,smtpPassword);
transport.sendMessage(
mimeMsg,
mimeMsg.getRecipients(Message.RecipientType.TO));
transport.close();
str = "发邮件成功!";
} catch (Exception e) {
str = e.toString();
}
return str;
}/**
*收件操作
*@param popServer 收件服务器
*@param popUser 收件用户名
*@param popPassword  收件密码
*@return 返回收件结果,若不成功返回错误信息
*/
public String receive(
String popServer,
String popUser,
String popPassword) {
String str = "";
Store store = null;
Folder folder = null;
try {
Properties props = System.getProperties();
Session session = Session.getDefaultInstance(props, null);
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++) {
str+= printMessage(msgs[msgNum]);
}
} catch (Exception ex) {
str+= ex.toString();
} finally {
try {
if (folder != null)
folder.close(false);
if (store != null)
store.close();
} catch (Exception ex2) {
str+= ex2.toString();
}
}
return str;
}/**
 *显示邮件内容
 *@param message 邮件对象
 *@return 返回邮件内容
 */
public String printMessage(Message message) {
String str = "<table>";
try {
//From
String from =
((InternetAddress) message.getFrom()[0]).getPersonal();
if (from == null)
from = ((InternetAddress) message.getFrom()[0]).getAddress();
str += "<tr><Td>FROM: " + from + "</td></tR>";//Subject
String subject = message.getSubject();
str += "<tr><Td>SUBJECT: " + subject + "</td></tr>";Part messagePart = message;
Object content = messagePart.getContent();
if (content instanceof Multipart) {
messagePart = ((Multipart) content).getBodyPart(0);
}//ContentType
String contentType = messagePart.getContentType();
str+= "<tr><Td>CONTENT:"
+ contentType
+ "</tD></tr><tr><Td valign=top>";//Content
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) {
str += thisLine;
thisLine = reader.readLine();
}
}
str += "</tD></tr>";
} catch (Exception ex) {
str += "<tr><td>" + ex.toString() + "</tD></tR>";
}
str+= "</table>";
return str;
}}

解决方案 »

  1.   

    http://dev.csdn.net/develop/article/21/21227.shtm
      

  2.   

    先建两个类,AuthenticatorUtil.java和EMail.java;
    调用方法:new Email().sendMail(接收邮箱地址,邮件主题,邮件体内容)
    AuthenticatorUtil.java清单:
    package p1;
    import javax.mail.PasswordAuthentication;
    //当smtp需要验证时所需要用到的验证类
    class AuthenticatorUtil
        extends javax.mail.Authenticator {
      private String strUser;
      private String strPwd;  public AuthenticatorUtil(String user, String password) {
        this.strUser = user;
        this.strPwd = password;
      }EMail.java清单:
    package p1;
    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import p1.AuthenticatorUtil;public class EMail{  public EMail() {}  //此方法执行邮件发送的操作
      //mailTo:目标邮件地址
      //mailSubject:邮件主题
      //mailBody:邮件体,在这里是邮件正文
      public boolean sendMail(String mailTo,String mailSubject,String mailBody){
          try {
            //初始化所有必要的参数
            String smtpServer = "smtp.bbbb.com";//smtp服务器
            String smtpAuth = "true";//smtp服务器是否需要进行验证
            String smtpUser = "uuuuu";//smtp分配的用户名(就是你的E-Mail地址中@符号前面部分)
            String smtpPassword = "pppp";//登陆口令
            String from = "[email protected]";//用于在对方收到的邮件中作为发送人地址显示
            String to = mailTo;//邮件需要发送到的目标邮件地址
            String subject = mailSubject;//邮件主题
            String text = mailBody;//邮件体,在这里是邮件正文
            Properties props = new Properties();//构造Properties,作为后面的Session参数容器
            Session sendMailSession;
            Transport transport;
            props.put("mail.smtp.host", smtpServer);
            props.put("mail.smtp.auth", smtpAuth);
            if ("true".equals(smtpAuth)) {
              //如果smtp服务器需要验证,则构建AuthertiactorUtil用于mail session的创建
              AuthenticatorUtil authutil = new AuthenticatorUtil(smtpUser, smtpPassword);
              sendMailSession = Session.getInstance(props, authutil);
            }
            else {
              sendMailSession = Session.getInstance(props);
            }        //设置是否是调试状态,如果这里设置为true的话,则会在控制台输出发送过程,输出信息类似于在telnet上发送邮件
            sendMailSession.setDebug(true);
            //初始化邮件消息
            Message message = new MimeMessage(sendMailSession);
            message.setFrom(new InternetAddress(from));
            message.setRecipient(Message.RecipientType.TO,
                                    new InternetAddress(mailTo));
            message.setSubject(subject);
            message.setSentDate(new Date());
            message.setText(text);
            message.saveChanges();
            transport = sendMailSession.getTransport("smtp");//此次会话是发送邮件(smtp)
            transport.send(message, message.getAllRecipients());//从这里可以看出来,可以设置多个发送目的地址
            transport.close();
          }catch (Exception e) {
            System.err.println("邮件发送失败:" + e.getMessage());
            return false;
          }
          return true;
        }
    }  protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(strUser, strPwd);
      }
    }
      

  3.   

    先建两个类,AuthenticatorUtil.java和EMail.java;
    调用方法:new Email().sendMail(接收邮箱地址,邮件主题,邮件体内容)
    AuthenticatorUtil.java清单:
    package p1;
    import javax.mail.PasswordAuthentication;
    //当smtp需要验证时所需要用到的验证类
    class AuthenticatorUtil
        extends javax.mail.Authenticator {
      private String strUser;
      private String strPwd;  public AuthenticatorUtil(String user, String password) {
        this.strUser = user;
        this.strPwd = password;
      }EMail.java清单:
    package p1;
    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import p1.AuthenticatorUtil;public class EMail{  public EMail() {}  //此方法执行邮件发送的操作
      //mailTo:目标邮件地址
      //mailSubject:邮件主题
      //mailBody:邮件体,在这里是邮件正文
      public boolean sendMail(String mailTo,String mailSubject,String mailBody){
          try {
            //初始化所有必要的参数
            String smtpServer = "smtp.bbbb.com";//smtp服务器
            String smtpAuth = "true";//smtp服务器是否需要进行验证
            String smtpUser = "uuuuu";//smtp分配的用户名(就是你的E-Mail地址中@符号前面部分)
            String smtpPassword = "pppp";//登陆口令
            String from = "[email protected]";//用于在对方收到的邮件中作为发送人地址显示
            String to = mailTo;//邮件需要发送到的目标邮件地址
            String subject = mailSubject;//邮件主题
            String text = mailBody;//邮件体,在这里是邮件正文
            Properties props = new Properties();//构造Properties,作为后面的Session参数容器
            Session sendMailSession;
            Transport transport;
            props.put("mail.smtp.host", smtpServer);
            props.put("mail.smtp.auth", smtpAuth);
            if ("true".equals(smtpAuth)) {
              //如果smtp服务器需要验证,则构建AuthertiactorUtil用于mail session的创建
              AuthenticatorUtil authutil = new AuthenticatorUtil(smtpUser, smtpPassword);
              sendMailSession = Session.getInstance(props, authutil);
            }
            else {
              sendMailSession = Session.getInstance(props);
            }        //设置是否是调试状态,如果这里设置为true的话,则会在控制台输出发送过程,输出信息类似于在telnet上发送邮件
            sendMailSession.setDebug(true);
            //初始化邮件消息
            Message message = new MimeMessage(sendMailSession);
            message.setFrom(new InternetAddress(from));
            message.setRecipient(Message.RecipientType.TO,
                                    new InternetAddress(mailTo));
            message.setSubject(subject);
            message.setSentDate(new Date());
            message.setText(text);
            message.saveChanges();
            transport = sendMailSession.getTransport("smtp");//此次会话是发送邮件(smtp)
            transport.send(message, message.getAllRecipients());//从这里可以看出来,可以设置多个发送目的地址
            transport.close();
          }catch (Exception e) {
            System.err.println("邮件发送失败:" + e.getMessage());
            return false;
          }
          return true;
        }
    }  protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(strUser, strPwd);
      }
    }