|
2 | 2 |
|
3 | 3 | import org.simplejavamail.converter.internal.mimemessage.MimeMessageHelper;
|
4 | 4 | import org.simplejavamail.converter.internal.mimemessage.MimeMessageParser;
|
| 5 | +import org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.ParsedMimeMessageComponents; |
5 | 6 | import org.simplejavamail.converter.internal.msgparser.OutlookMessageParser;
|
6 | 7 | import org.simplejavamail.email.Email;
|
7 | 8 | import org.simplejavamail.email.Recipient;
|
|
14 | 15 | import javax.annotation.Nonnull;
|
15 | 16 | import javax.mail.MessagingException;
|
16 | 17 | import javax.mail.Session;
|
17 |
| -import javax.mail.internet.AddressException; |
18 | 18 | import javax.mail.internet.InternetAddress;
|
19 | 19 | import javax.mail.internet.MimeMessage;
|
20 | 20 | import java.io.ByteArrayInputStream;
|
@@ -51,12 +51,9 @@ private EmailConverter() {
|
51 | 51 | * @param mimeMessage The MimeMessage from which to create the {@link Email}.
|
52 | 52 | */
|
53 | 53 | public static Email mimeMessageToEmail(@Nonnull final MimeMessage mimeMessage) {
|
| 54 | + checkNonEmptyArgument(mimeMessage, "mimeMessage"); |
54 | 55 | final Email email = new Email(false);
|
55 |
| - try { |
56 |
| - fillEmailFromMimeMessage(email, checkNonEmptyArgument(mimeMessage, "mimeMessage")); |
57 |
| - } catch (MessagingException | IOException e) { |
58 |
| - throw new EmailConverterException(format(EmailConverterException.PARSE_ERROR_MIMEMESSAGE, e.getMessage()), e); |
59 |
| - } |
| 56 | + fillEmailFromMimeMessage(email, MimeMessageParser.parseMimeMessage(mimeMessage)); |
60 | 57 | return email;
|
61 | 58 | }
|
62 | 59 |
|
@@ -231,58 +228,53 @@ public static String outlookMsgToEML(@Nonnull final InputStream outloookMsgInput
|
231 | 228 | Helpers
|
232 | 229 | */
|
233 | 230 |
|
234 |
| - private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnull final MimeMessage mimeMessage) |
235 |
| - throws MessagingException, IOException { |
| 231 | + private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnull final ParsedMimeMessageComponents parsed) { |
236 | 232 | checkNonEmptyArgument(email, "email");
|
237 |
| - checkNonEmptyArgument(mimeMessage, "mimeMessage"); |
238 |
| - final MimeMessageParser parser = new MimeMessageParser(mimeMessage).parse(); |
239 |
| - final InternetAddress from = parser.getFrom(); |
240 |
| - email.setFromAddress(from.getPersonal(), from.getAddress()); |
241 |
| - final InternetAddress replyTo = parser.getReplyTo(); |
242 |
| - email.setReplyToAddress(replyTo.getPersonal(), replyTo.getAddress()); |
243 |
| - for (final Map.Entry<String, Object> header : parser.getHeaders().entrySet()) { |
244 |
| - if (!fillPredefinedHeader(email, header)) { |
245 |
| - email.addHeader(header.getKey(), header.getValue()); |
246 |
| - } |
| 233 | + checkNonEmptyArgument(parsed, "parsedMimeMessageComponents"); |
| 234 | + if (parsed.getFromAddress() != null) { |
| 235 | + email.setFromAddress(parsed.getFromAddress().getPersonal(), parsed.getFromAddress().getAddress()); |
| 236 | + } |
| 237 | + if (parsed.getReplyToAddresses() != null) { |
| 238 | + email.setReplyToAddress(parsed.getReplyToAddresses().getPersonal(), parsed.getReplyToAddresses().getAddress()); |
| 239 | + } |
| 240 | + for (final Map.Entry<String, Object> header : parsed.getHeaders().entrySet()) { |
| 241 | + email.addHeader(header.getKey(), header.getValue()); |
247 | 242 | }
|
248 |
| - email.setId(mimeMessage.getMessageID()); |
249 |
| - for (final InternetAddress to : parser.getTo()) { |
| 243 | + InternetAddress dnTo = parsed.getDispositionNotificationTo(); |
| 244 | + if (dnTo != null) { |
| 245 | + email.setDispositionNotificationTo(new Recipient(dnTo.getPersonal(), dnTo.getAddress(), null)); |
| 246 | + } |
| 247 | + InternetAddress rrTo = parsed.getReturnReceiptTo(); |
| 248 | + if (rrTo != null) { |
| 249 | + email.setReturnReceiptTo(new Recipient(rrTo.getPersonal(), rrTo.getAddress(), null)); |
| 250 | + } |
| 251 | + InternetAddress bTo = parsed.getBounceToAddress(); |
| 252 | + if (bTo != null) { |
| 253 | + email.setBounceToRecipient(new Recipient(bTo.getPersonal(), bTo.getAddress(), null)); |
| 254 | + } |
| 255 | + email.setId(parsed.getMessageId()); |
| 256 | + for (final InternetAddress to : parsed.getToAddresses()) { |
250 | 257 | email.addNamedToRecipients(to.getPersonal(), to.getAddress());
|
251 | 258 | }
|
252 | 259 | //noinspection QuestionableName
|
253 |
| - for (final InternetAddress cc : parser.getCc()) { |
| 260 | + for (final InternetAddress cc : parsed.getCcAddresses()) { |
254 | 261 | email.addNamedCcRecipients(cc.getPersonal(), cc.getAddress());
|
255 | 262 | }
|
256 |
| - for (final InternetAddress bcc : parser.getBcc()) { |
| 263 | + for (final InternetAddress bcc : parsed.getBccAddresses()) { |
257 | 264 | email.addNamedBccRecipients(bcc.getPersonal(), bcc.getAddress());
|
258 | 265 | }
|
259 |
| - email.setSubject(parser.getSubject()); |
260 |
| - email.setText(parser.getPlainContent()); |
261 |
| - email.setTextHTML(parser.getHtmlContent()); |
262 |
| - for (final Map.Entry<String, DataSource> cid : parser.getCidMap().entrySet()) { |
| 266 | + email.setSubject(parsed.getSubject() != null ? parsed.getSubject() : ""); |
| 267 | + email.setText(parsed.getPlainContent()); |
| 268 | + email.setTextHTML(parsed.getHtmlContent()); |
| 269 | + for (final Map.Entry<String, DataSource> cid : parsed.getCidMap().entrySet()) { |
263 | 270 | final String cidName = checkNonEmptyArgument(cid.getKey(), "cid.key");
|
264 | 271 | email.addEmbeddedImage(extractCID(cidName), cid.getValue());
|
265 | 272 | }
|
266 |
| - for (final Map.Entry<String, DataSource> attachment : parser.getAttachmentList().entrySet()) { |
| 273 | + for (final Map.Entry<String, DataSource> attachment : parsed.getAttachmentList().entrySet()) { |
267 | 274 | email.addAttachment(extractCID(attachment.getKey()), attachment.getValue());
|
268 | 275 | }
|
269 | 276 | }
|
270 | 277 |
|
271 |
| - private static boolean fillPredefinedHeader(@Nonnull Email email, @Nonnull Map.Entry<String, Object> header) throws AddressException { |
272 |
| - if (header.getKey().equals("Disposition-Notification-To")) { |
273 |
| - email.setUseDispositionNotificationTo(true); |
274 |
| - InternetAddress internetAddress = new InternetAddress((String) header.getValue()); |
275 |
| - email.setDispositionNotificationTo(new Recipient(internetAddress.getPersonal(), internetAddress.getAddress(), null)); |
276 |
| - return true; |
277 |
| - } else if (header.getKey().equals("Return-Receipt-To")) { |
278 |
| - email.setUseReturnReceiptTo(true); |
279 |
| - InternetAddress internetAddress = new InternetAddress((String) header.getValue()); |
280 |
| - email.setReturnReceiptTo(new Recipient(internetAddress.getPersonal(), internetAddress.getAddress(), null)); |
281 |
| - return true; |
282 |
| - } |
283 |
| - return false; |
284 |
| - } |
285 |
| - |
286 | 278 | private static void fillEmailFromOutlookMessage(@Nonnull final Email email, @Nonnull final OutlookMessage outlookMessage) {
|
287 | 279 | checkNonEmptyArgument(email, "email");
|
288 | 280 | checkNonEmptyArgument(outlookMessage, "outlookMessage");
|
|
0 commit comments