陆益达
2015-10-28 10:13
采纳率: 33.3%
浏览 2.4k
已采纳

关于javamail IMAP协议下发送邮件问题

发送邮件成功后,邮件会保存到收件箱一份并不是保存到已发送;然而我并没有在程序里设置保存的方法。我怀疑是邮件服务器的配置问题,但是用web版的并不存在这样的问题;
现在问题是处在什么地方,到底邮件服务器可不可以设置保存的地方?
这是我的发送方法:

public boolean sendHtmlAndAffixMail(MailSenderInfo mailInfo) throws Exception {
    // 判断是否需要身份认证
    MailAuthenticator authenticator = null;

// mailInfo.setUserName(mailInfo.getUserName()+"@cmstest.com");

    logger.info("UserName----"+mailInfo.getUserName()+"----FromAddress---"+mailInfo.getFromAddress());

    Properties pro = mailInfo.getProperties();
    if(mailInfo.isValidateSSL()){
        pro.put("mail.smtp.starttls.enable","true");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();  
        sf.setTrustAllHosts(true); 
        pro.put("mail.smtp.socketFactory.class", sf);
    }
    // 如果需要身份认证,则创建一个密码验证器
    if (mailInfo.isValidate()) {
        logger.info("身份认证------------------------"+mailInfo.getUserName());
        authenticator = new MailAuthenticator(mailInfo.getUserName(),
                mailInfo.getPassword());
    }
    // 根据邮件会话属性和密码验证器构造一个发送邮件的session
    Session session = Session.getDefaultInstance(pro, authenticator);
    try {
        MimeMessage msg = new MimeMessage(session); // 构造MimeMessage 并设定基本的值
        // MimeMessage msg = new MimeMessage();
        msg.setFrom(new InternetAddress(mailInfo.getFromAddress()));//
        logger.info("传入的发件人------------------"+mailInfo.getFromAddress());
        // msg.addRecipients(Message.RecipientType.TO, address);
        // //这个只能是给一个人发送email
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailInfo.getToAddress()));
        logger.info("收件人------------------"+mailInfo.getToAddress());
        msg.setSubject(MimeUtility.encodeText(mailInfo.getSubject()));
        Multipart mp = new MimeMultipart();// 构造Multipart
        MimeBodyPart mbpContent = new MimeBodyPart();// 向Multipart添加正文
        mbpContent.setContent(mailInfo.getContent(),
                "text/html;charset=GB2312");
        mp.addBodyPart(mbpContent);// 向MimeMessage添加(Multipart代表正文)
        if(mailInfo.getAttachFileNames()!=null){
            Vector file = mailInfo.getAttachFileNames();
            Enumeration efile = file.elements();// 向Multipart添加附件
            while (efile.hasMoreElements()) {
                MimeBodyPart mbpFile = new MimeBodyPart();
                String filename = efile.nextElement().toString();
                logger.info("-filename--------------------------"+filename.toLowerCase());
                FileDataSource fds = new FileDataSource(filename);
                mbpFile.setDataHandler(new DataHandler(fds));
                logger.info("fds-----------------------------"+fds.getName());
                mbpFile.setFileName(MimeUtility.encodeText(fds.getName()));
                // 向MimeMessage添加(Multipart代表附件)
                mp.addBodyPart(mbpFile);
            }
            file.removeAllElements();
        }


        // 向Multipart添加MimeMessage
        msg.setContent(mp);
        msg.setSentDate(new Date());

// msg.setFlag(Flags.Flag.FLAGGED, true);
msg.saveChanges();
// 发送邮件
Transport transport = session.getTransport("smtp");
try {
transport.connect(mailInfo.getMailServerHost(), mailInfo
.getUserName(), mailInfo.getPassword());
} catch (Exception e) {
logger.info("connect mail server fail--------by---"+mailInfo.getUserName()+"port:"+mailInfo.getMailServerHost());
e.printStackTrace();
return false;
}
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (Exception mex) {
mex.printStackTrace();
return false;
}
return true;

}

}


  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 陆益达 2015-10-29 11:00
    已采纳

    --.sorry...经过检查日之后发现是前端写了个密送给发件人。。。MD

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题