2012-04-12 6 views
4

apache.commons.mail을 통해 base64 인코딩 된 파일을 보내려고하고 있는데, 그게 어디로 가야 Content-Transfer-Encoding: base64 헤더를 얻으려고 솔기를 뽑을 수 없습니다.아파치 커먼즈 이메일 인코딩 base64로 첨부

// Create the email 
MultiPartEmail email = new MultiPartEmail(); 
email.setSmtpPort(587); 
email.setDebug(false); 
email.setHostName("smtp.gmail.com"); 
email.setAuthentication("[email protected]", "password"); 
email.setTLS(true); 

email.addTo("[email protected]"); 
email.setFrom("[email protected]"); 
email.setSubject("subject"); 

email.attach(new ByteArrayDataSource(
    Base64.encodeBase64(attachFull.getBytes()), "text/plain"), 
    "samplefile.txt", 
    "sample file desc", 
    EmailAttachment.ATTACHMENT 
); 

그리고 이것은 수신자에게 전달됩니다. 나는 파일이 Base64로 인코딩되도록 지정할 수있는 방법

------=_Part_0_614021571.1334210788719 
Content-Type: text/plain; charset=Cp1252; name=texto.txt 
Content-Transfer-Encoding: quoted-printable 
Content-Disposition: attachment; filename=samplefile.txt 
Content-Description: sample file desc 

?

답변

1

attach 메서드를 재정의하고 Content-Transfer-Encoding 헤더를 설정해보십시오. 기본적으로 프레임 워크는 그것을 설정하지 않거나 MIME bodyPart를 완전히 노출하지 않습니다.

+0

그럴 수도 있습니다 ... 나는'mimeMultipart()'(javax.mail)을 commons.mail의 외부 파트로 추가하는 데 성공했습니다. 그러나 뭔가 여전히 옳지 않습니다. 나는 Base64 인코딩을 망칠지도 모른다. 내가 조금 더 파고 들자. – Frankie

+0

나를 궤도에 올려 놓을 때 답을 받아 들였다. 광산을 참고 자료로 게시했습니다. 감사. – Frankie

5

가장 쉬운 해결책은 다음과 같이 뭔가를하는 것입니다 :

// create a multipart leg for a specific attach 
MimeMultipart part = new MimeMultipart(); 
BodyPart messageBodyPart = new MimeBodyPart(); 
messageBodyPart.setDataHandler (new DataHandler(new ByteArrayDataSource(attachFull.getBytes(), "text/plain"))); 
messageBodyPart.removeHeader("Content-Transfer-Encoding"); 
messageBodyPart.addHeader("Content-Transfer-Encoding", "base64"); 
part.addBodyPart(messageBodyPart); 
email.addPart(part); 

그리고 javax의 자동베이스 64에 파일을 변환합니다.

희망이 있습니다.

+0

본문 전송 인코딩을 조작하기위한 답을 사용했는데, 효과가 있습니다. 나는 단지'removeHeader' 호출을 버릴 필요가있었습니다. – Jarekczek

관련 문제