2012-04-12 60 views
4

我试图发送一个文件base64编码通过apache.commons.mail,我只是不能缝到Content-Transfer-Encoding: base64标题应该去的地方。Apache Commons电子邮件编码附加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 
); 

这就是接收者所得到的。

------=_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 

如何指定该文件是Base64编码?

回答

1

您可能会尝试覆盖attach方法并在其中设置Content-Transfer-Encoding标头。默认情况下,框架不会为您设置或者干净地公开MIME bodyPart。

+0

这可能会......我已经成功添加了一个'MimeMultipart()'(javax.mail)作为commons.mail的外部部件。但有些东西还是不对的。我可能会搞乱Base64编码。让我再深入一点... – Frankie 2012-04-12 07:04:52

+0

接受你的答案,因为它让我走上正轨。作为参考发布我的。谢谢。 – Frankie 2012-04-12 07:19:19

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将您的文件自动转换为Base64。

希望它有帮助。

+0

我用答案来操纵身体转移编码,也适用。我只需要删除'removeHeader'调用。 – Jarekczek 2014-07-25 10:14:14