List of usage examples for javax.mail.internet MimeMessage getMatchingHeaderLines
@Override public Enumeration<String> getMatchingHeaderLines(String[] names) throws MessagingException
From source file:de.mendelson.comm.as2.message.AS2MessageCreation.java
/**Enwrapps the data into a signed MIME message structure and returns it*/ private void enwrappInMessageAndSign(AS2Message message, Part contentPart, Partner sender, Partner receiver) throws Exception { AS2MessageInfo info = (AS2MessageInfo) message.getAS2Info(); MimeMessage messagePart = new MimeMessage(Session.getInstance(System.getProperties(), null)); //sign message if this is requested if (info.getSignType() != AS2Message.SIGNATURE_NONE) { MimeMultipart signedPart = this.signContentPart(contentPart, sender, receiver); if (this.logger != null) { String signAlias = this.signatureCertManager.getAliasByFingerprint(sender.getSignFingerprintSHA1()); this.logger.log(Level.INFO, this.rb.getResourceString("message.signed", new Object[] { info.getMessageId(), signAlias, this.rbMessage.getResourceString("signature." + receiver.getSignType()) }), info);/*w ww . java2 s .com*/ } messagePart.setContent(signedPart); messagePart.saveChanges(); } else { //unsigned message if (contentPart instanceof MimeBodyPart) { MimeMultipart unsignedPart = new MimeMultipart(); unsignedPart.addBodyPart((MimeBodyPart) contentPart); if (this.logger != null) { this.logger.log(Level.INFO, this.rb.getResourceString("message.notsigned", new Object[] { info.getMessageId() }), info); } messagePart.setContent(unsignedPart); } else if (contentPart instanceof MimeMultipart) { messagePart.setContent((MimeMultipart) contentPart); } else if (contentPart instanceof MimeMessage) { messagePart = (MimeMessage) contentPart; } else { throw new IllegalArgumentException("enwrappInMessageAndSign: Unable to set the content of a " + contentPart.getClass().getName()); } messagePart.saveChanges(); } //store signed or unsigned data ByteArrayOutputStream signedOut = new ByteArrayOutputStream(); //normally the content type header is folded (which is correct but some products are not able to parse this properly) //Now take the content-type, unfold it and write it Enumeration headerLines = messagePart.getMatchingHeaderLines(new String[] { "Content-Type" }); LineOutputStream los = new LineOutputStream(signedOut); while (headerLines.hasMoreElements()) { //requires java mail API >= 1.4 String nextHeaderLine = MimeUtility.unfold((String) headerLines.nextElement()); //write the line only if the as2 message is encrypted. If the as2 message is unencrypted this header is added later //in the class MessageHttpUploader if (info.getEncryptionType() != AS2Message.ENCRYPTION_NONE) { los.writeln(nextHeaderLine); } //store the content line in the as2 message object, this value is required later in MessageHttpUploader message.setContentType(nextHeaderLine.substring(nextHeaderLine.indexOf(':') + 1)); } messagePart.writeTo(signedOut, new String[] { "Message-ID", "Mime-Version", "Content-Type" }); signedOut.flush(); signedOut.close(); message.setDecryptedRawData(signedOut.toByteArray()); }