我在用Javamail做转发邮件报如下错:
javax.mail.MessagingException: IOException while sending message;
  nested exception is:
java.io.IOException: javax.mail.MessagingException: No MimeBodyPart content
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1167)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at com.mail.SendEmail.transmitEmail(SendEmail.java:253)
at com.mail.SendEmail.main(SendEmail.java:274)
Caused by: java.io.IOException: javax.mail.MessagingException: No MimeBodyPart content
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:105)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:869)
at javax.activation.DataHandler.writeTo(DataHandler.java:302)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
... 4 more实现代码如下:
/**
 * 邮件转发
 * 
 */
public void transmitEmail()throws UnsupportedEncodingException {
Properties prop = new Properties(); // 获取系统环境
Authenticator auth = new MailAuthenticator(); // 邮件服务器认证
prop.put("mail.smtp.host", Email.Email_Host);
prop.put("mail.smtp.auth", "true");
prop.put("mail.transport.protocol","smtp");
Session session = Session.getDefaultInstance(prop, auth);// 设置对话和邮件服务器进行通讯

try {
//查找要转发的邮件
Store store= session.getStore("pop3");
String host="192.168.1.247",username="[email protected]", password="000000";//要读取的邮箱的服务器地址,邮箱用户名和密码
store.connect(host,username, password);
Folder folder = store.getFolder("INBOX");//OUTBOX
    folder.open(Folder.READ_WRITE);
    Message message=folder.getMessage(2);
    //创建转发邮件信息
    Message forward = new MimeMessage(session); /** 设置邮件对象 */
    //设置主题
    forward.setSubject("FW:我是主题");
forward.setFrom(new InternetAddress("[email protected]"));
forward.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]","我是收件人"));


//文字邮件体部分 
BodyPart messageBodyPart = new MimeBodyPart();

    messageBodyPart.setText("我是文字邮件体部分");
    
// 创建Multipart容器
Multipart multipart = new MimeMultipart(); 
multipart.addBodyPart(messageBodyPart);  // 被转发的文字邮件体部分
messageBodyPart = new MimeBodyPart(); 
messageBodyPart.setDataHandler(message.getDataHandler()); 

// 添加到Multipart容器  
multipart.addBodyPart(messageBodyPart); 

// Associate multi-part with message 
forward.setContent(multipart); 
System.out.println("sendNormalEmail() 开始转发邮件……");
Transport.send(forward); // 发送邮件
System.out.println("转发成功!");
} catch (MessagingException e) {
System.out.println("转发失败!");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
补充:用Foxmail作邮件服务器。javamail邮件邮件服务器Foxmail

解决方案 »

  1.   

    每封邮件都会有一个对应的Number,用这个getMessage()就可以获得对应的Number了,然后Message message=folder.getMessage(Number);
      

  2.   

    2楼的大哥,如果你仔细看的话,应该可以看出我也是用java mail api 操作邮箱服务器。
      

  3.   

    3楼的大哥,如果你仔细看的话,应该可以看出我也是用java mail api 操作邮箱服务器。