Java编码Base64,MimeBodyPart附件

Java编码Base64,MimeBodyPart附件,java,base64,attachment,mimebodypart,Java,Base64,Attachment,Mimebodypart,我有一个用Base64编码的PDF文件,现在我想发送PDF并允许从邮件中打开 我在读这个问题,但不适合我 我的问题是,当收到邮件时,我无法打开PDF,但使用Telnet替代方案是可行的 如何发送加密的Base64 PDF以及如何从邮件中打开它?在附加PDF之前,您是否正在执行Base64编码?我很确定你不应该这样做。@VGR是的,文件ins在附加之前进行编码,然后如何处理?尝试使用该类。它似乎是专为你想做的事情而设计的。它扩展了MimeBodyPart,因此具有所有相同的方法。使用时,不需要设置

我有一个用Base64编码的PDF文件,现在我想发送PDF并允许从邮件中打开

我在读这个问题,但不适合我

我的问题是,当收到邮件时,我无法打开PDF,但使用Telnet替代方案是可行的


如何发送加密的Base64 PDF以及如何从邮件中打开它?

在附加PDF之前,您是否正在执行Base64编码?我很确定你不应该这样做。@VGR是的,文件ins在附加之前进行编码,然后如何处理?尝试使用该类。它似乎是专为你想做的事情而设计的。它扩展了MimeBodyPart,因此具有所有相同的方法。使用时,不需要设置内容传输编码头;而是在构造函数中传递该值。请确保尝试发送的PDF格式正确。尝试从/path/to/encoded/Base64/file.PDF上的原始位置打开PDF
  Message message = new MimeMessage(session);
  message.setFrom(new InternetAddress(from));
  message.setSentDate(new Date());
  message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(sendTo));
  message.setSubject("Subject - " + new Date());
  Multipart multipart = new MimeMultipart();

  MimeBodyPart mimeBodyPart = new MimeBodyPart();
  mimeBodyPart.setContent("contentMessage", "text/html");  // YES FOR NOW SIMPLE MESSAGE
  multipart.addBodyPart(mimeBodyPart);


  MimeBodyPart attachmentOnFly = new MimeBodyPart();

  /*
  //In the future the PDF will be created on Fly (Will not be stored)
  InputStream inputStream = new FileInputStream("/path/to/encoded/Base64/file.pdf");//new ByteArrayInputStream("Bytes from source".getBytes());
  ByteArrayDataSource byteArrayDataSource = new ByteArrayDataSource(inputStream, "application/pdf");
  attachmentOnFly.setDataHandler(new DataHandler(byteArrayDataSource));
   */


  attachmentOnFly.attachFile(new File("/path/to/encoded/Base64/file.pdf"));
  attachmentOnFly.setHeader("Content-Type", "application/pdf");
  attachmentOnFly.setHeader("Content-Transfer-Encoding", "base64");
  attachmentOnFly.setDisposition(Part.ATTACHMENT);
  attachmentOnFly.setFileName("myFileName.pdf");
  multipart.addBodyPart(attachmentOnFly);

  message.setContent(multipart);
  Transport.send(message);