Smtp java.io.IOException:“异常”;“纯文本/纯文本”;DataContentHandler需要字符串对象,该对象被指定为类[B]类型的对象

Smtp java.io.IOException:“异常”;“纯文本/纯文本”;DataContentHandler需要字符串对象,该对象被指定为类[B]类型的对象,smtp,jakarta-mail,mime-types,mime-message,mime-mail,Smtp,Jakarta Mail,Mime Types,Mime Message,Mime Mail,当我尝试发送一个附件时,无论是zip文件还是文本文件,代码都可以正常工作,但是当我尝试发送两个附件时,一个是文本文件,另一个是zip文件,它会抛出错误。我尝试了很多方法,但仍然没有成功 MimeMessage msg = new MimeMessage(session){ msg.addHeader("Content-type", directMessage.getBody().getContentType()); msg.addHeader("Content-Transfer-Encoding

当我尝试发送一个附件时,无论是zip文件还是文本文件,代码都可以正常工作,但是当我尝试发送两个附件时,一个是文本文件,另一个是zip文件,它会抛出错误。我尝试了很多方法,但仍然没有成功

MimeMessage msg = new MimeMessage(session){
msg.addHeader("Content-type", directMessage.getBody().getContentType());
msg.addHeader("Content-Transfer-Encoding", "8bit");
msg.setFrom(new InternetAddress(fromaddress));
msg.setSubject(directMessage.getSubject(), "UTF-8");
MimeMultipart mp = new MimeMultipart();
BodyPart bodyPart = null; 
for(int i=0;i<directMessage.getAttachments().size();i++){

    bodyPart = new MimeBodyPart();
    bodyPart.setContent(Base64.decodeBase64(directMessage.getAttachments().get(i).getContent().getBytes()),directMessage.getAttachments().get(i).getContentType());
    bodyPart.setDisposition(decryptedMessage.getBodyPart(0).getDisposition());
    bodyPart.setFileName(directMessage.getAttachments().get(i).getFilename());
    mp.addBodyPart(bodyPart);
    mp.setSubType("multipart/mixed");
}
msg.setContent(mp);
msg.setSentDate(new Date());
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toaddress, false));
Transport.send(msg);   

如果有存储在字节数组中的数据,请将其用作零件的内容:

bodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(
    Base64.decodeBase64(directMessage.getAttachments().get(i).getContent().getBytes()),
    directMessage.getAttachments().get(i).getContentType());
bodyPart.setDataHandler(new DataHandler(ds));
bodyPart.setDisposition(decryptedMessage.getBodyPart(0).getDisposition());
bodyPart.setFileName(directMessage.getAttachments().get(i).getFilename());

如何发送文本/普通类型的附件?检查此线程可能对您有所帮助。
bodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(
    Base64.decodeBase64(directMessage.getAttachments().get(i).getContent().getBytes()),
    directMessage.getAttachments().get(i).getContentType());
bodyPart.setDataHandler(new DataHandler(ds));
bodyPart.setDisposition(decryptedMessage.getBodyPart(0).getDisposition());
bodyPart.setFileName(directMessage.getAttachments().get(i).getFilename());