mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-24 10:22:15 -05:00
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
@ -36,6 +36,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
import org.apache.james.mime4j.codec.EncoderUtil;
|
||||||
|
|
||||||
public class MessageCompose extends K9Activity implements OnClickListener, OnFocusChangeListener
|
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++)
|
for (int i = 0, count = mAttachments.getChildCount(); i < count; i++)
|
||||||
{
|
{
|
||||||
Attachment attachment = (Attachment) mAttachments.getChildAt(i).getTag();
|
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_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);
|
mp.addBodyPart(bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user