Correctly encode attachment filenames with non-ASCII characters. Thanks to jca02266 who provided the base patch.
Fixes issue 1555
This commit is contained in:
parent
d5b128e8cf
commit
2121ebc012
1 changed files with 35 additions and 3 deletions
|
@ -36,6 +36,7 @@ import java.util.ArrayList;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
import org.apache.james.mime4j.codec.EncoderUtil;
|
||||
|
||||
public class MessageCompose extends K9Activity implements OnClickListener, OnFocusChangeListener
|
||||
{
|
||||
|
@ -747,10 +748,41 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc
|
|||
for (int i = 0, count = mAttachments.getChildCount(); i < count; i++)
|
||||
{
|
||||
Attachment attachment = (Attachment) mAttachments.getChildAt(i).getTag();
|
||||
MimeBodyPart bp = new MimeBodyPart(new LocalStore.LocalAttachmentBody(attachment.uri, getApplication()));
|
||||
bp.addHeader(MimeHeader.HEADER_CONTENT_TYPE, String.format("%s;\n name=\"%s\"", attachment.contentType, attachment.name));
|
||||
|
||||
MimeBodyPart bp = new MimeBodyPart(
|
||||
new LocalStore.LocalAttachmentBody(attachment.uri, getApplication()));
|
||||
|
||||
/*
|
||||
* Correctly encode the filename here. Otherwise the whole
|
||||
* header value (all parameters at once) will be encoded by
|
||||
* MimeHeader.writeTo().
|
||||
*/
|
||||
bp.addHeader(MimeHeader.HEADER_CONTENT_TYPE, String.format("%s;\n name=\"%s\"",
|
||||
attachment.contentType,
|
||||
EncoderUtil.encodeIfNecessary(attachment.name,
|
||||
EncoderUtil.Usage.WORD_ENTITY, 7)));
|
||||
|
||||
bp.addHeader(MimeHeader.HEADER_CONTENT_TRANSFER_ENCODING, "base64");
|
||||
bp.addHeader(MimeHeader.HEADER_CONTENT_DISPOSITION, String.format("attachment;\n filename=\"%s\";\n size=%d", attachment.name, attachment.size));
|
||||
|
||||
/*
|
||||
* TODO: Oh the joys of MIME...
|
||||
*
|
||||
* From RFC 2183 (The Content-Disposition Header Field):
|
||||
* "Parameter values longer than 78 characters, or which
|
||||
* contain non-ASCII characters, MUST be encoded as specified
|
||||
* in [RFC 2184]."
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* Content-Type: application/x-stuff
|
||||
* title*1*=us-ascii'en'This%20is%20even%20more%20
|
||||
* title*2*=%2A%2A%2Afun%2A%2A%2A%20
|
||||
* title*3="isn't it!"
|
||||
*/
|
||||
bp.addHeader(MimeHeader.HEADER_CONTENT_DISPOSITION, String.format(
|
||||
"attachment;\n filename=\"%s\";\n size=%d",
|
||||
attachment.name, attachment.size));
|
||||
|
||||
mp.addBodyPart(bp);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue