Skip to content

Commit

Permalink
#114: First version of the complete recipients redesign
Browse files Browse the repository at this point in the history
  • Loading branch information
bbottema committed Nov 26, 2017
1 parent ae6e95b commit 507b0f2
Show file tree
Hide file tree
Showing 14 changed files with 607 additions and 876 deletions.
104 changes: 58 additions & 46 deletions src/main/java/org/simplejavamail/converter/EmailConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.ParsedMimeMessageComponents;
import org.simplejavamail.converter.internal.msgparser.OutlookMessageParser;
import org.simplejavamail.email.Email;
import org.simplejavamail.email.Recipient;
import org.simplejavamail.email.EmailBuilder;
import org.simplejavamail.internal.util.MiscUtil;
import org.simplejavamail.outlookmessageparser.model.OutlookFileAttachment;
import org.simplejavamail.outlookmessageparser.model.OutlookMessage;
Expand Down Expand Up @@ -46,45 +46,59 @@ private EmailConverter() {
/*
To Email instance
*/

/**
* @param mimeMessage The MimeMessage from which to create the {@link Email}.
*/
public static Email mimeMessageToEmail(@Nonnull final MimeMessage mimeMessage) {
return mimeMessageToEmailBuilder(mimeMessage).build();
}

/**
* @param mimeMessage The MimeMessage from which to create the {@link Email}.
*/
public static EmailBuilder mimeMessageToEmailBuilder(@Nonnull final MimeMessage mimeMessage) {
checkNonEmptyArgument(mimeMessage, "mimeMessage");
final Email email = new Email(false);
fillEmailFromMimeMessage(email, MimeMessageParser.parseMimeMessage(mimeMessage));
return email;
final EmailBuilder emailBuilder = EmailBuilder.builder().ignoringDefaults();
buildEmailFromMimeMessage(emailBuilder, MimeMessageParser.parseMimeMessage(mimeMessage));
return emailBuilder;
}

/**
* @param msgData The content of an Outlook (.msg) message from which to create the {@link Email}.
*/
public static Email outlookMsgToEmail(@Nonnull final String msgData) {
final Email email = new Email(false);
final EmailBuilder emailBuilder = EmailBuilder.builder().ignoringDefaults();
final OutlookMessage outlookMessage = OutlookMessageParser.parseOutlookMsg(checkNonEmptyArgument(msgData, "msgData"));
fillEmailFromOutlookMessage(email, outlookMessage);
return email;
buildEmailFromOutlookMessage(emailBuilder, outlookMessage);
return emailBuilder.build();
}

/**
* @param msgfile The content of an Outlook (.msg) message from which to create the {@link Email}.
*/
public static Email outlookMsgToEmail(@Nonnull final File msgfile) {
final Email email = new Email(false);
final EmailBuilder emailBuilder = EmailBuilder.builder().ignoringDefaults();
final OutlookMessage outlookMessage = OutlookMessageParser.parseOutlookMsg(checkNonEmptyArgument(msgfile, "msgfile"));
fillEmailFromOutlookMessage(email, outlookMessage);
return email;
buildEmailFromOutlookMessage(emailBuilder, outlookMessage);
return emailBuilder.build();
}

/**
* @param msgInputStream The content of an Outlook (.msg) message from which to create the {@link Email}.
*/
public static Email outlookMsgToEmail(@Nonnull final InputStream msgInputStream) {
final Email email = new Email(false);
return outlookMsgToEmailBuilder(msgInputStream).build();
}

/**
* @param msgInputStream The content of an Outlook (.msg) message from which to create the {@link Email}.
*/
public static EmailBuilder outlookMsgToEmailBuilder(@Nonnull final InputStream msgInputStream) {
final EmailBuilder emailBuilder = EmailBuilder.builder().ignoringDefaults();
final OutlookMessage outlookMessage = OutlookMessageParser.parseOutlookMsg(checkNonEmptyArgument(msgInputStream, "msgInputStream"));
fillEmailFromOutlookMessage(email, outlookMessage);
return email;
buildEmailFromOutlookMessage(emailBuilder, outlookMessage);
return emailBuilder;
}

/**
Expand Down Expand Up @@ -228,81 +242,79 @@ public static String outlookMsgToEML(@Nonnull final InputStream outloookMsgInput
Helpers
*/

private static void fillEmailFromMimeMessage(@Nonnull final Email email, @Nonnull final ParsedMimeMessageComponents parsed) {
checkNonEmptyArgument(email, "email");
private static void buildEmailFromMimeMessage(@Nonnull final EmailBuilder builder, @Nonnull final ParsedMimeMessageComponents parsed) {
checkNonEmptyArgument(builder, "emailBuilder");
checkNonEmptyArgument(parsed, "parsedMimeMessageComponents");
if (parsed.getFromAddress() != null) {
email.setFromAddress(parsed.getFromAddress().getPersonal(), parsed.getFromAddress().getAddress());
builder.from(parsed.getFromAddress().getPersonal(), parsed.getFromAddress().getAddress());
}
if (parsed.getReplyToAddresses() != null) {
email.setReplyToAddress(parsed.getReplyToAddresses().getPersonal(), parsed.getReplyToAddresses().getAddress());
}
for (final Map.Entry<String, Object> header : parsed.getHeaders().entrySet()) {
email.addHeader(header.getKey(), header.getValue());
builder.replyTo(parsed.getReplyToAddresses().getPersonal(), parsed.getReplyToAddresses().getAddress());
}
builder.withHeaders(parsed.getHeaders());
final InternetAddress dnTo = parsed.getDispositionNotificationTo();
if (dnTo != null) {
email.setDispositionNotificationTo(new Recipient(dnTo.getPersonal(), dnTo.getAddress(), null));
builder.withDispositionNotificationTo(dnTo.getPersonal(), dnTo.getAddress());
}
final InternetAddress rrTo = parsed.getReturnReceiptTo();
if (rrTo != null) {
email.setReturnReceiptTo(new Recipient(rrTo.getPersonal(), rrTo.getAddress(), null));
builder.withReturnReceiptTo(rrTo.getPersonal(), rrTo.getAddress());
}
final InternetAddress bTo = parsed.getBounceToAddress();
if (bTo != null) {
email.setBounceToRecipient(new Recipient(bTo.getPersonal(), bTo.getAddress(), null));
builder.bounceTo(bTo.getPersonal(), bTo.getAddress());
}
email.setId(parsed.getMessageId());
builder.id(parsed.getMessageId());
for (final InternetAddress to : parsed.getToAddresses()) {
email.addNamedToRecipients(to.getPersonal(), to.getAddress());
builder.to(to.getPersonal(), to.getAddress());
}
//noinspection QuestionableName
for (final InternetAddress cc : parsed.getCcAddresses()) {
email.addNamedCcRecipients(cc.getPersonal(), cc.getAddress());
builder.cc(cc.getPersonal(), cc.getAddress());
}
for (final InternetAddress bcc : parsed.getBccAddresses()) {
email.addNamedBccRecipients(bcc.getPersonal(), bcc.getAddress());
builder.bcc(bcc.getPersonal(), bcc.getAddress());
}
email.setSubject(parsed.getSubject() != null ? parsed.getSubject() : "");
email.setText(parsed.getPlainContent());
email.setTextHTML(parsed.getHtmlContent());
builder.subject(parsed.getSubject() != null ? parsed.getSubject() : "");
builder.text(parsed.getPlainContent());
builder.textHTML(parsed.getHtmlContent());
for (final Map.Entry<String, DataSource> cid : parsed.getCidMap().entrySet()) {
final String cidName = checkNonEmptyArgument(cid.getKey(), "cid.key");
email.addEmbeddedImage(extractCID(cidName), cid.getValue());
builder.embedImage(extractCID(cidName), cid.getValue());
}
for (final Map.Entry<String, DataSource> attachment : parsed.getAttachmentList().entrySet()) {
email.addAttachment(extractCID(attachment.getKey()), attachment.getValue());
builder.addAttachment(extractCID(attachment.getKey()), attachment.getValue());
}
}

private static void fillEmailFromOutlookMessage(@Nonnull final Email email, @Nonnull final OutlookMessage outlookMessage) {
checkNonEmptyArgument(email, "email");
private static void buildEmailFromOutlookMessage(@Nonnull final EmailBuilder builder, @Nonnull final OutlookMessage outlookMessage) {
checkNonEmptyArgument(builder, "emailBuilder");
checkNonEmptyArgument(outlookMessage, "outlookMessage");
email.setFromAddress(outlookMessage.getFromName(), outlookMessage.getFromEmail());
builder.from(outlookMessage.getFromName(), outlookMessage.getFromEmail());
if (!MiscUtil.valueNullOrEmpty(outlookMessage.getReplyToEmail())) {
email.setReplyToAddress(outlookMessage.getReplyToName(), outlookMessage.getReplyToEmail());
builder.replyTo(outlookMessage.getReplyToName(), outlookMessage.getReplyToEmail());
}
for (final OutlookRecipient to : outlookMessage.getRecipients()) {
email.addNamedToRecipients(to.getName(), to.getAddress());
builder.to(to.getName(), to.getAddress());
}
//noinspection QuestionableName
for (final OutlookRecipient cc : outlookMessage.getCcRecipients()) {
email.addNamedCcRecipients(cc.getName(), cc.getAddress());
builder.cc(cc.getName(), cc.getAddress());
}
for (final OutlookRecipient bcc : outlookMessage.getBccRecipients()) {
email.addNamedBccRecipients(bcc.getName(), bcc.getAddress());
builder.bcc(bcc.getName(), bcc.getAddress());
}
email.setSubject(outlookMessage.getSubject());
email.setText(outlookMessage.getBodyText());
email.setTextHTML(outlookMessage.getBodyHTML() != null ? outlookMessage.getBodyHTML() : outlookMessage.getConvertedBodyHTML());
builder.subject(outlookMessage.getSubject());
builder.text(outlookMessage.getBodyText());
builder.textHTML(outlookMessage.getBodyHTML() != null ? outlookMessage.getBodyHTML() : outlookMessage.getConvertedBodyHTML());

for (final Map.Entry<String, OutlookFileAttachment> cid : outlookMessage.fetchCIDMap().entrySet()) {
final String cidName = checkNonEmptyArgument(cid.getKey(), "cid.key");
//noinspection ConstantConditions
email.addEmbeddedImage(extractCID(cidName), cid.getValue().getData(), cid.getValue().getMimeTag());
builder.embedImage(extractCID(cidName), cid.getValue().getData(), cid.getValue().getMimeTag());
}
for (final OutlookFileAttachment attachment : outlookMessage.fetchTrueAttachments()) {
email.addAttachment(attachment.getLongFilename(), attachment.getData(), attachment.getMimeTag());
builder.addAttachment(attachment.getLongFilename(), attachment.getData(), attachment.getMimeTag());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ protected void updateMessageID() throws MessagingException {
setHeaders(email, message);
message.setSentDate(new Date());

if (email.isApplyDKIMSignature()) {
if (!valueNullOrEmpty(email.getDkimSigningDomain())) {
return signMessageWithDKIM(message, email);
}

Expand Down
Loading

0 comments on commit 507b0f2

Please sign in to comment.