问题
I'm trying to send a file base64-encoded via apache.commons.mail
and I just can't seam to get the Content-Transfer-Encoding: base64
header where it's supposed to go.
// Create the email
MultiPartEmail email = new MultiPartEmail();
email.setSmtpPort(587);
email.setDebug(false);
email.setHostName("smtp.gmail.com");
email.setAuthentication("from@gmail.com", "password");
email.setTLS(true);
email.addTo("to@example.com");
email.setFrom("from@example.com");
email.setSubject("subject");
email.attach(new ByteArrayDataSource(
Base64.encodeBase64(attachFull.getBytes()), "text/plain"),
"samplefile.txt",
"sample file desc",
EmailAttachment.ATTACHMENT
);
And this is what gets to the recipient.
------=_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
How I can specify that the file is Base64 encoded?
回答1:
You might try overriding the attach method and set the Content-Transfer-Encoding
header in there. By default the framework doesn't set it for you or expose the MIME bodyPart cleanly.
回答2:
The easiest solution would be to do something like this:
// 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);
And javax will automatically convert your file to base64.
Hope it helps.
来源:https://stackoverflow.com/questions/10118348/apache-commons-email-encode-attach-with-base64