2012-04-12 9 views
4

Ich versuche, eine Datei base64-encoded über apache.commons.mail zu senden und ich kann einfach nicht naht, um die Content-Transfer-Encoding: base64 Header zu bekommen, wo es hingehen soll.Apache Commons Email encode anhängen mit 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 
); 

Und das ist, was der Empfänger bekommt.

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

Wie ich angeben, dass die Datei Base64 codiert?

Antwort

1

Sie könnten versuchen, die attach Methode überschreiben und setzen Sie die Content-Transfer-Encoding Header dort. Standardmäßig stellt das Framework es nicht für Sie ein oder stellt das MIME bodyPart sauber zur Verfügung.

+0

Das könnte ... Ich hatte einige Erfolge mit dem Hinzufügen einer 'MimeMultipart()' (javax.mail) als externen Teil zu commons.mail. Aber etwas stimmt immer noch nicht. Ich kann die Base64-Codierung vermasseln. Lass mich ein bisschen weiter graben ... – Frankie

+0

Akzeptiert deine Antwort, da sie mich auf den richtigen Weg gebracht hat. Posted meins als Referenz. Vielen Dank. – Frankie

5

Die einfachste Lösung wäre, so etwas zu tun:

// 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); 

Und javax automatisch Ihre Datei zu Base64 konvertieren.

Ich hoffe, es hilft.

+0

Ich habe die Antwort verwendet, um Body-Transfer-Codierung zu manipulieren, funktioniert auch. Ich musste nur den Aufruf "removeHeader" löschen. – Jarekczek