你在设定完Message以后调用message.saveChanges();没有,你试试看
    protected void send() throws Exception {
        //发送邮件使用的服务器
        String hostName = mailBox.getHostName();
        //连接服务器的用户名
        String userName = mailBox.getUserName();
        //连接服务器的用户密码
        String password = mailBox.getPassword();        //Properties env = System.getProperties();
        Properties env=new Properties();
        //存储发送邮件服务器的信息
        env.put("mail.smtp.host", hostName);
        //同时通过验证
        env.put("mail.smtp.auth", "true");        //得到登陆器
        AbstractAuthenticator authenticator = MailElementFactory.getInstance()
                .createAuthenticator();
        //根据属性新建一个邮件会话
        Session session = Session.getDefaultInstance(env);
        session.setDebug(false);        //创建一个消息
        MimeMessage message = new MimeMessage(session);
        //设定该消息的信息        //设定发件人
        UserEMailAddress fromAddress = mail.getFromUser();
        if (fromAddress != null) {
            String fromUser = fromAddress.getUserName();
            String fromEmail = fromAddress.getEmailAddress();
            InternetAddress fromInter = new InternetAddress(fromUser, fromEmail);
            message.setFrom(fromInter);
        } else {
            InternetAddress from=new InternetAddress("[email protected]");
            message.setFrom(from);
        }        //设定发送到
        Collection toUser = mail.getToUser();
        if (toUser != null && toUser.size() > 0) {
            Iterator iter = toUser.iterator();
            while (iter.hasNext()) {
                UserEMailAddress address = (UserEMailAddress) iter.next();
                addAddress(message, address, Message.RecipientType.TO);
            }
        }        //设定抄送到
        Collection copyUser = mail.getCopyUser();
        if (copyUser != null && copyUser.size() > 0) {
            Iterator iter = copyUser.iterator();
            while (iter.hasNext()) {
                UserEMailAddress address = (UserEMailAddress) iter.next();
                addAddress(message, address, Message.RecipientType.CC);
            }
        }        //密送到
        Collection copySecretUser = mail.getCopySecrecyUser();
        if (copySecretUser != null && copySecretUser.size() > 0) {
            Iterator iter = copySecretUser.iterator();
            while (iter.hasNext()) {
                UserEMailAddress address = (UserEMailAddress) iter.next();
                addAddress(message, address, Message.RecipientType.BCC);
            }
        }        //设定回复地址
        Collection repliesUser = mail.getRepliesUser();
        if (repliesUser != null && repliesUser.size() > 0) {
            Iterator replyIter = repliesUser.iterator();
            Collection replyAddresses = new ArrayList();
            while (replyIter.hasNext()) {
                UserEMailAddress reAddress = (UserEMailAddress) replyIter
                        .next();
                String replyUserName = reAddress.getUserName();
                String replyEmail = reAddress.getEmailAddress();
                InternetAddress re = new InternetAddress(replyUserName,
                        replyEmail);
                replyAddresses.add(re);
            }
            message.setReplyTo((Address[]) replyAddresses
                    .toArray(new Address[] {}));
        }
        
        //设定需要发送收条,第二参数为回复地址,可以多个设定
        if(mail.isReplySign()){
            //设定收条地址
            repliesUser = mail.getRepliesUser();
            if (repliesUser != null && repliesUser.size() > 0) {
                Iterator replyIter = repliesUser.iterator();
                Collection replyAddresses = new ArrayList();
                while (replyIter.hasNext()) {
                    UserEMailAddress reAddress = (UserEMailAddress) replyIter
                            .next();
                    String replyUserName = reAddress.getUserName();
                    String replyEmail = reAddress.getEmailAddress();
                    InternetAddress re = new InternetAddress(replyUserName,
                            replyEmail);
                    replyAddresses.add(re);
                }
                message.addHeader("Disposition-Notification-To","[email protected],[email protected]");
            }     
        }
       
        
        //设定主题
        message.setSubject(mail.getSubject());        //设定发送时间
        message.setSentDate(mail.getSendDate());        //创建消息体
        buildMessageContent(message);
        //加了没有反映
//        message.setFlag(Flags.Flag.DRAFT,true);
//        message.setFlag(Flags.Flag.SEEN,true);
                
        
        
        
        message.saveChanges();
        
        Transport transport=session.getTransport("smtp");
        MailListener listener=new MailListener();
        transport.addTransportListener(listener);
        transport.addConnectionListener(listener);
        transport.connect(hostName,userName,password);
        transport.sendMessage(message,message.getAllRecipients());
        transport.close();
    }

解决方案 »

  1.   

    应该不是saveChanges的问题,文档说Transport.send(MimeMessage)会调用MimeMessage.saveChages();再说我把MimeMessage放到FileOutputStream一点问题都没有的http://java.sun.com/j2ee/1.4/docs/api/javax/mail/Transport.html#send(javax.mail.Message)Send the message to the specified addresses, ignoring any recipients specified in the message itself. The send method calls the saveChanges method on the message before sending it.