Skip to content

Commit 478c756

Browse files
authored
Merge pull request #226 from samuelo/master
allow creating email with attachment that has space in the filename
2 parents f2d2f18 + 21fe8ed commit 478c756

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/main/java/org/simplejavamail/converter/internal/mimemessage/MimeMessageHelper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.simplejavamail.converter.internal.mimemessage;
22

3+
import javax.mail.internet.ParameterList;
34
import net.markenwerk.utils.mail.dkim.DkimMessage;
45
import net.markenwerk.utils.mail.dkim.DkimSigner;
56
import org.simplejavamail.email.AttachmentResource;
@@ -260,7 +261,10 @@ private static BodyPart getBodyPartFromDatasource(final AttachmentResource attac
260261
attachmentPart.setDataHandler(new DataHandler(new NamedDataSource(fileName, attachmentResource.getDataSource())));
261262
attachmentPart.setFileName(fileName);
262263
final String contentType = attachmentResource.getDataSource().getContentType();
263-
attachmentPart.setHeader("Content-Type", contentType + "; filename=" + fileName + "; name=" + resourceName);
264+
ParameterList pl = new ParameterList();
265+
pl.set("filename", fileName);
266+
pl.set("name", resourceName);
267+
attachmentPart.setHeader("Content-Type", contentType + pl.toString());
264268
attachmentPart.setHeader("Content-ID", format("<%s>", resourceName));
265269
attachmentPart.setDisposition(dispositionType);
266270
return attachmentPart;

src/test/java/org/simplejavamail/converter/internal/mimemessage/MimeMessageHelperTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package org.simplejavamail.converter.internal.mimemessage;
22

3+
import javax.mail.BodyPart;
4+
import javax.mail.MessagingException;
5+
import javax.mail.internet.ContentType;
6+
import javax.mail.internet.MimeMessage;
7+
import javax.mail.internet.MimeMultipart;
38
import org.assertj.core.api.ThrowableAssert;
49
import org.junit.Test;
510
import org.junit.runner.RunWith;
@@ -131,4 +136,17 @@ public void call() throws Throwable {
131136
})
132137
.hasMessage(MimeMessageParseException.ERROR_SIGNING_DKIM_INVALID_DOMAINKEY);
133138
}
139+
140+
@Test
141+
public void filenameWithSpaceEncoding() throws IOException, MessagingException {
142+
final String fileName = "file name.txt";
143+
final Email email = EmailHelper.createDummyEmailBuilder(true, true, false)
144+
.clearAttachments().withAttachment(fileName, "abc".getBytes(),
145+
"text/plain").buildEmail();
146+
final MimeMessage mimeMessage = EmailConverter.emailToMimeMessage(email);
147+
final BodyPart bodyPart = ((MimeMultipart) mimeMessage.getContent()).getBodyPart(1);
148+
ContentType ct = new ContentType(bodyPart.getHeader("Content-Type")[0]);
149+
assertThat(ct.getParameter("filename")).isEqualTo(fileName);
150+
assertThat(bodyPart.getFileName()).isEqualTo(fileName);
151+
}
134152
}

0 commit comments

Comments
 (0)