MimeMessage message=new MimeMessage(session);
MimeBodyPart messageBodyPart=new MimeBodyPart();
Multipart multipart=new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
File attachment;
attachment=new File(附件路径);
FileDataSource fileDataSource=new FileDataSource(attachment);
messageBodyPart.setDataHandler(new DataHandler(fileDataSource));
messageBodyPart.setFileName(attachment.getName());
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);

解决方案 »

  1.   

    利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序。也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet。 (没有装载JavaMail API的读者,可以到此站点下载,并按照Readme.txt设置好ClassPath) 
    一、JavaMail中一些我们需要的类 
    1.Properties JavaMail需要Properties来创建一个session对象,其属性值就是发送邮件的主机,如: Properties props = new Properties ();
    props.put("mail.smtp.host", "smtp.xxxx.com");//可以换上你的smtp主机名,就像你在OutLook中设置smtp主机名一样。 2.Session 所有的基于JavaMail的程序都至少需要一个或全部的对话目标。 Session session = Session.getInstance(props, null); 3.MimeMessage 信息对象将把你所发送的邮件真实的反映出来。 MimeMessage msg = new MimeMessage(session); 4.Transport 邮件的发送是由Transport来完成的: Transport.send(msg); 二、我们自己创建的可发送附件的类 
    import java.util.* ;
    import java.io.* ;
    import javax.mail.* ;
    import javax.mail.internet.* ;
    import javax.activation.* ;
    public class Mail {
    //定义发件人、收件人、主题等
    String to="";
    String from="";
    String host="";
    String filename="";
    String subject="";
    //用于保存发送附件的文件名的集合
    Vector file = new Vector();
    //做一个可以传发件人等参数的构造
    public Mail (String to,String from,String smtpServer,String subject){
    //初始化发件人、收件人、主题等
    this.to=to;
    this.from=from;
    this.host=smtpServer;
    this.subject=subject;
    }
    //该方法用于收集附件名
    public void attachfile(String fname){
    file.addElement(fname);
    }
    //开始发送信件的方法
    public boolean startSend(){
    //创建Properties对象
    Properties props = System.getProperties();
    //创建信件服务器
    props.put("mail.smtp.host", host);
    //得到默认的对话对象
    Session session=Session.getDefaultInstance(props, null); try {
    //创建一个消息,并初始化该消息的各项元素
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from));
    InternetAddress[] address={new InternetAddress(to)};
    msg.setRecipients(Message.RecipientType.TO,address);
    msg.setSubject(subject);
    //后面的BodyPart将加入到此处创建的Multipart中
    Multipart mp = new MimeMultipart();
    //利用枚举器方便的遍历集合
    Enumeration efile=file.elements();
    //检查序列中是否还有更多的对象
    while(efile.hasMoreElements()){
    MimeBodyPart mbp=new MimeBodyPart();
    //选择出每一个附件名
    filename=efile .nextElement().toString();
    //得到数据源
    FileDataSource fds=new FileDataSource(filename);
    //得到附件本身并至入BodyPart
    mbp.setDataHandler(new DataHandler(fds));
    //得到文件名同样至入BodyPart
    mbp.setFileName(fds.getName());
    mp.addBodyPart(mbp);
    }
    //移走集合中的所有元素
    file.removeAllElements();
    //Multipart加入到信件
    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;
    }
    } 三、一个简单的servlet 
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    public class SendMail extends
    HttpServlet implements SingleThreadModel{
    public void init(ServletConfig Conf)
    throws ServletException {
    super.init(Conf);
    }
    public void doPost(HttpServletRequest
    Req, HttpServletResponse Res)
    throws ServletException, IOException {
    try{
    //实例化刚才我们做的类,并按其构造传进相应的参数
    Mail sendmail=newMail("[email protected]",
    "[email protected]","smtp.21cn.com","test");
    sendmail.attachfile("table.pdf");
    sendmail.startSend();
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    public void destroy() {
    }
    } 四、小结 
    至此,你已经可以在邮件中添加附件了,而且可以是多个。像这样,将响应与逻辑相分离对代码的扩展和维护是相当有好处的。若Beans与servlet不在同一个包下,别忘了“import”。  
      

  2.   

    利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序。也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet。 (没有装载JavaMail API的读者,可以到此站点下载,并按照Readme.txt设置好ClassPath) 
    一、JavaMail中一些我们需要的类 
    1.Properties JavaMail需要Properties来创建一个session对象,其属性值就是发送邮件的主机,如: Properties props = new Properties ();
    props.put("mail.smtp.host", "smtp.xxxx.com");//可以换上你的smtp主机名,就像你在OutLook中设置smtp主机名一样。 2.Session 所有的基于JavaMail的程序都至少需要一个或全部的对话目标。 Session session = Session.getInstance(props, null); 3.MimeMessage 信息对象将把你所发送的邮件真实的反映出来。 MimeMessage msg = new MimeMessage(session); 4.Transport 邮件的发送是由Transport来完成的: Transport.send(msg); 二、我们自己创建的可发送附件的类 
    import java.util.* ;
    import java.io.* ;
    import javax.mail.* ;
    import javax.mail.internet.* ;
    import javax.activation.* ;
    public class Mail {
    //定义发件人、收件人、主题等
    String to="";
    String from="";
    String host="";
    String filename="";
    String subject="";
    //用于保存发送附件的文件名的集合
    Vector file = new Vector();
    //做一个可以传发件人等参数的构造
    public Mail (String to,String from,String smtpServer,String subject){
    //初始化发件人、收件人、主题等
    this.to=to;
    this.from=from;
    this.host=smtpServer;
    this.subject=subject;
    }
    //该方法用于收集附件名
    public void attachfile(String fname){
    file.addElement(fname);
    }
    //开始发送信件的方法
    public boolean startSend(){
    //创建Properties对象
    Properties props = System.getProperties();
    //创建信件服务器
    props.put("mail.smtp.host", host);
    //得到默认的对话对象
    Session session=Session.getDefaultInstance(props, null); try {
    //创建一个消息,并初始化该消息的各项元素
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from));
    InternetAddress[] address={new InternetAddress(to)};
    msg.setRecipients(Message.RecipientType.TO,address);
    msg.setSubject(subject);
    //后面的BodyPart将加入到此处创建的Multipart中
    Multipart mp = new MimeMultipart();
    //利用枚举器方便的遍历集合
    Enumeration efile=file.elements();
    //检查序列中是否还有更多的对象
    while(efile.hasMoreElements()){
    MimeBodyPart mbp=new MimeBodyPart();
    //选择出每一个附件名
    filename=efile .nextElement().toString();
    //得到数据源
    FileDataSource fds=new FileDataSource(filename);
    //得到附件本身并至入BodyPart
    mbp.setDataHandler(new DataHandler(fds));
    //得到文件名同样至入BodyPart
    mbp.setFileName(fds.getName());
    mp.addBodyPart(mbp);
    }
    //移走集合中的所有元素
    file.removeAllElements();
    //Multipart加入到信件
    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;
    }
    } 三、一个简单的servlet 
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    public class SendMail extends
    HttpServlet implements SingleThreadModel{
    public void init(ServletConfig Conf)
    throws ServletException {
    super.init(Conf);
    }
    public void doPost(HttpServletRequest
    Req, HttpServletResponse Res)
    throws ServletException, IOException {
    try{
    //实例化刚才我们做的类,并按其构造传进相应的参数
    Mail sendmail=newMail("[email protected]",
    "[email protected]","smtp.21cn.com","test");
    sendmail.attachfile("table.pdf");
    sendmail.startSend();
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    public void destroy() {
    }
    } 四、小结 
    至此,你已经可以在邮件中添加附件了,而且可以是多个。像这样,将响应与逻辑相分离对代码的扩展和维护是相当有好处的。若Beans与servlet不在同一个包下,别忘了“import”。