2011-01-21 2 views
2

원시 8 비트 부분을 포함하는 MIME 전자 메일을 7 비트 부분 만 포함하는 RFC822 호환 메시지로 변환하는 가장 쉬운 방법은 무엇입니까?
부품은 자동으로 "Content-Transfer-Encoding : quoted-printable"로 변환되어야합니다.8 비트 MIME 메시지를 따옴표 붙이기로 변환

내 응용 프로그램은 Java로 개발되었습니다. 그러나 커맨드 라인 툴은 훌륭 할 것입니다. 나는 reformime 시도했지만이 도구는 버그가 보인다 어떤 도움

감사합니다,
올리비에 :-(제대로 메시지를 다시 작성하지 않습니다

답변

2

JavaMail에 좋은 해결책처럼 보인다. 찾기, 파일에서 MimeMessage 만들기 내용이 전송 인코딩이 변경 MimeBodyPart.setHeader("Content-Transfer-Encoding", "quoted-printable")를 호출하고 MimeMessage.writeTo()를 통해 결과 메시지를 작성하려는 신체 부분이의 라인을 따라

뭔가 :.

Session session = Session.getInstance(new Properties()); 
MimeMessage mm = new MimeMessage(new FileInputStream(msgfile)); 
// assuming we know that it's a multipart; otherwise, check Content-Type first... 
MimeMultipart multi = (MimeMultipart) mm.getContent(); 
for (int i = 0; i < multi.getCount(); i++) { 
    MimeBodyPart mbp = (MimeBodyPart) multi.getBodyPart(i); 
    mbp.setHeader("Content-Transfer-Encoding", "quoted-printable"); 
} 
mm.saveChanges(); 
mm.writeTo(new FileOutputStream(outfile)); 

기본적으로 MimeMessage은 메시지를 변경했을 때 Message-ID 헤더를 재설정합니다. 이 기능을 원하지 않으면 MimeMessage.updateMessageID()을 아무 작업없이 무시하십시오.

+0

답변 해 주셔서 감사합니다. JavaMail의 MimeMessage 객체를 수정하면 중첩 된 Multipart에서 제대로 작동하지 않습니다. 솔루션으로 일부 부품은 업데이트되지만 그렇지 않은 부품도 있습니다. JavaMail에서 잘 알려진 문제라고 생각합니다 (http://labs.consol.de/lang/en/blog/java/java-mail/removing-attachments-with-javamail/ 참조). – Antares

+1

예제 코드는 중첩 된 multipart를 처리하지 않습니다. 사용하고자하는 기능을 보여주기위한 지침 일뿐입니다. 이 기사에서 언급 된 문제를 보여주는 재귀 프로그램을 실제로 작성 했습니까? 스트림에서 파싱 된 메시지는 그 문제가 없어야하기 때문에 ... – dkarp

관련 문제