S / Mime Attachment Java - PullRequest
       12

S / Mime Attachment Java

0 голосов
/ 28 сентября 2018

Я пытаюсь подписать электронную почту с протоколом S / Mime.Он отлично работает с телом.Но когда я присоединяю вложение к письму, цифровая подпись делает имя письма (и расширение) пустым.Таким образом, полученное электронное письмо с приложением «whitoutTitle.dat» вместо «name.pdf», например.Я использую SMIMESignedGenerator от BCMail.Приложение не изменено.Вот почему я обеспокоен.

// This attachment part loose the name after the digital signature
File partFile = new File(fileName);
DataSource fds = new FileDataSource(partFile);
attachmentPart1.setDataHandler(new DataHandler(fds));
attachmentPart1.setFileName(partFile.getName());

// This attachment don't loose its name after the signature
attachmentPart2.setText(strinbBuilder.toString());
attachmentPart2.setFileName("name.txt");

multipart.addBodyPart(attachmentPart1);
multipart.addBodyPart(attachmentPart2);

mimemsg.setContent(multipart);

MimeBodyPart mimeBodyPart = mimemsg.getContent();

SMIMESignedGenerator generator = new SMIMESignedGenerator();
generator.addCertificates(getCertificateStore(smimeKey));
generator.addSignerInfoGenerator(getInfoGenerator(smimeKey));
MimeMultipart signedMimeMultipart = generator.generate(mimeBodyPart);
MimeBodyPart signedMimeBodyPart = new MimeBodyPart();
signedMimeBodyPart.setContent(signedMimeMultipart);

У кого-нибудь была такая же проблема?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 02 октября 2018

Я нашел объяснение, которое не могу понять.На самом деле, имя файла отправляется «нормально», но с форматом в заголовке

Content-Disposition : attachment; filename*=Cp1252''newName.pdf . 

Если я не задаю имя файла, у меня есть:

Content-Disposition : attachment; filename=oldName.pdf  

(Мне нужно было изменить имя, поэтому я использовал установщик fileName).Я не могу объяснить, почему, но часть "* = Cp1252 '" ответственна за отсутствие имени во вложении, но только после того, как сообщение было подписано (если нет, у меня есть доброе имя).Поэтому мое решение состоит в том, чтобы изменить имя напрямую:

attachmentPart.setHeader("Content-Disposition", "newName.pdf") 

, и это работает!Это не элегантно, но это решение.

...