Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
package gov.va.med.ars.util;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import gov.va.med.ars.constants.ClaimSubmissionConstants;
import gov.va.med.domain.ars.ClaimContact;
import gov.va.med.domain.ars.ClaimSubmission;
import gov.va.med.domain.ars.EmailTemplate;
public class Email {
private static final Logger logger = LogManager.getLogger(Email.class);
private static final String BREAK = "<br/>";
public boolean postMail(ClaimSubmission clmSubmission, EmailTemplate template, EmailInfo info,
List<ClaimContact> claimContacts) throws MessagingException {
if (!info.getEmailEnable()) {
return false;
}
boolean debug = false;
boolean result = true;
// Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.host", info.getMailSmtpHost());
props.put("mail.host", info.getMailHost());
// create some properties and get the default Session
Session session = Session.getInstance(props);
session.setDebug(debug);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress(info.getEmailFrom());
msg.setFrom(addressFrom);
List<String> recipientsAdd = new ArrayList<>();
if (info.getRecipients() != null && info.getRecipients().length > 0) {
recipientsAdd = Arrays.asList(info.getRecipients());
}
List<String> emailList = addToRecipientsFromClaimContactList(claimContacts, recipientsAdd);
if (!emailList.isEmpty()) {
InternetAddress[] addressTo = getAddressTo(emailList);
if (addressTo.length > 0) {
msg.setRecipients(Message.RecipientType.TO, getAddressTo(emailList));
} else {
return false;
}
} else {
return false;
}
boolean readNoticeAddressValid = false;
readNoticeAddressValid = isValidEmail(info.getReadNoticeAddress().trim());
if (info.isSendReadNotice() && readNoticeAddressValid) {
msg.setHeader("Disposition-Notification-To", info.getReadNoticeAddress().trim());
}
if (clmSubmission.getSubmissionStatus().equalsIgnoreCase("submitted")) {
msg.setSubject(info.getEmailSubjectSubmitted());
} else {
msg.setSubject(info.getEmailSubjectGeneric());
}
String emailContent = Email.buildEmailBody(template.getEmailTemplateHeader(), template.getEmailTemplateBody(),
clmSubmission.getTrn02claimIndex(), clmSubmission.getSubmissionid());
try {
// Setting the Subject and Content Type
msg.setContent(emailContent, "text/html");
Transport.send(msg);
} catch (Exception e) {
logger.error(e.getMessage());
result = false;
}
return result;
}
public static String buildEmailBody(String header, String message, BigInteger claimId, BigInteger submissionId) {
// create the email body
StringBuilder emailBodyBuilder = new StringBuilder();
emailBodyBuilder.append(header);
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append(BREAK);
String[] linebreaks = message.split("\\n");
for (int i = 0; i < linebreaks.length; i++) {
emailBodyBuilder.append(linebreaks[i]);
emailBodyBuilder.append(BREAK);
}
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append("Thank you");
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append("Submission ID: " + submissionId);
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append("Claim Index or PDI: " + claimId);
emailBodyBuilder.append(BREAK);
emailBodyBuilder.append(BREAK);
return emailBodyBuilder.toString();
}
public static boolean isValidEmail(String email) {
boolean result = false;
if (email != null && !email.equals("")) {
try {
InternetAddress emailAddress = new InternetAddress(email);
emailAddress.validate();
result = true;
} catch (AddressException e) {
logger.error(e.getMessage(), e);
}
}
return result;
}
public static String getTemplateName(String status) {
String tempName = "";
switch (status.toUpperCase(Locale.ENGLISH)) {
case ClaimSubmissionConstants.SUBMISSION_SUBMITTED_STATUS:
tempName = ClaimSubmissionConstants.SUBMITTED_TEMPLATE;
break;
case ClaimSubmissionConstants.SUBMISSION_PENDING_STATUS:
tempName = ClaimSubmissionConstants.PENDING_TEMPLATE;
break;
case ClaimSubmissionConstants.SUBMISSION_ERROR_STATUS:
tempName = ClaimSubmissionConstants.ERROR_TEMPLATE;
break;
case ClaimSubmissionConstants.SUBMISSION_ABANDONED_STATUS:
tempName = ClaimSubmissionConstants.ABANDONED_TEMPLATE;
break;
case ClaimSubmissionConstants.SUBMISSION_CLOSED_STATUS:
tempName = ClaimSubmissionConstants.CLOSED_TEMPLATE;
break;
case ClaimSubmissionConstants.SUBMISSION_COMPLETE_STATUS:
tempName = ClaimSubmissionConstants.COMPLETE_TEMPLATE;
break;
case ClaimSubmissionConstants.SUBMISSION_MANUALLY_CLOSED_STATUS:
tempName = ClaimSubmissionConstants.MANUALLY_CLOSED;
break;
default:
tempName = "Invalid Status";
}
return tempName;
}
public static InternetAddress[] getAddressTo(List<String> recipientsAdd) {
InternetAddress[] addressTo = new InternetAddress[recipientsAdd.size()];
if (!recipientsAdd.isEmpty()) {
String[] recipientsArr = new String[recipientsAdd.size()];
for (int i = 0; i < recipientsAdd.size(); i++) {
recipientsArr[i] = recipientsAdd.get(i).trim();
}
addressTo = new InternetAddress[recipientsArr.length];
for (int i = 0; i < recipientsArr.length; i++) {
if (isValidEmail(recipientsArr[i])) {
try {
addressTo[i] = new InternetAddress(recipientsArr[i]);
} catch (AddressException e) {
logger.error(e.getMessage());
}
}
}
}
return addressTo;
}
public static List<String> addToRecipientsFromClaimContactList(List<ClaimContact> claimContacts,
List<String> recipients) {
List<String> emails = new ArrayList<>();
Set<String> uniqueEmails = new HashSet<>(recipients);
if (!claimContacts.isEmpty()) {
for (ClaimContact contact : claimContacts) {
if (contact != null && contact.getContactemail() != null && contact.getContactemail() != "")
emails.add(contact.getContactemail());
}
}
if (!uniqueEmails.isEmpty()) {
for (String recipient : uniqueEmails) {
emails.add(recipient);
}
}
return emails;
}
}