Content-type是跟data handler 密切相关的,也就是跟data source有关的
这个InputStream是合法的邮件形成的我曾经写过这样的程序,透过防火墙发信
发信时,生成MimeMessage对象,然后通过socket和防火墙外的servlet通信,把信以流的形式传出,servlet中利用这个输入流重新构造信件
代码大致如下,希望对你有用//发信
    MimeMessage message = getMessage();
    if(message == null){
      return false;
    }
    try{
      URL url = new URL(mailOutURL);
      HttpURLConnection connection = (HttpURLConnection)url.openConnection();
      connection.setDoOutput(true);
      OutputStream os = new BufferedOutputStream(connection.getOutputStream());
      message.writeTo(os);
      os.close();
      InputStream is = new BufferedInputStream(connection.getInputStream());
      int c = 0;
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      while((c=is.read())!=-1){
        baos.write(c);
      }
      is.close();
      connection.disconnect();
      String ok = baos.toString();
      baos.close();
      if(needKeepRecord){
        record(message);
      }
      if(OK.equals(ok)){
        return true;
      }else{
        setError("...........");
        return false;
      }
//servlet 重新构造信件    boolean success = true;
    Properties props = new Properties();
    props.put("mail.smtp.host" , smtpHost);
    props.put("mail.host",smtpHost);
    Session  session = null;
    if(userId !=null){
      props.put("mail.smtp.auth", "true");
     props.put("mail.smtp.user", userId);
     props.put("mail.smtp.password",password);
      session = javax.mail.Session.getInstance(props,new MyAuthenticator(userId, password));
    }else{
      session = javax.mail.Session.getDefaultInstance(props,null);
    }
    session.setDebug(true);
    String error = "";
    InputStream is = 
      new BufferedInputStream(
        request.getInputStream());
    try{
      MimeMessage message = new MimeMessage(session, is);
      Transport.send(message);
    }catch(MessagingException me){
     success = false;
      me.printStackTrace();
      error = me.toString();
    }
    is.close();
    if(success){
      out.print(MailSender.OK);
    }else{
      out.print(MailSender.FAIL + " " + error);
    }