126 lines
6 KiB
Java
126 lines
6 KiB
Java
package com.alexanderlogistics.mail;
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.util.Optional;
|
|
import java.util.logging.Logger;
|
|
|
|
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
|
import org.imixs.marty.profile.ProfileService;
|
|
import org.imixs.workflow.ItemCollection;
|
|
import org.imixs.workflow.exceptions.PluginException;
|
|
|
|
import jakarta.inject.Inject;
|
|
import jakarta.mail.MessagingException;
|
|
import jakarta.mail.internet.InternetAddress;
|
|
import jakarta.mail.internet.MimeMessage;
|
|
|
|
/**
|
|
* Dieses Plugin überschreibt einfach nur From und Sender im Header. Ist in
|
|
* neuen Versionen von Imixs-Workflow 6.2.2 automatisch gelöst.
|
|
*
|
|
*/
|
|
public class MailPlugin extends org.imixs.marty.profile.MailPlugin {
|
|
private static final Logger logger = Logger.getLogger(MailPlugin.class.getName());
|
|
|
|
@Inject
|
|
@ConfigProperty(name = "mail.authenticatedSender")
|
|
Optional<String> mailAuthenticatedSender;
|
|
|
|
@Inject
|
|
ProfileService profileService;
|
|
|
|
/**
|
|
* This method creates a new mail header with custom from and reply-to addresses
|
|
*
|
|
*/
|
|
@Override
|
|
public ItemCollection run(ItemCollection documentContext, ItemCollection documentActivity) throws PluginException {
|
|
// run default functionality
|
|
ItemCollection result = super.run(documentContext, documentActivity);
|
|
boolean debug = true; // immer debuggen!!
|
|
|
|
// now get the Mail Session object and adapt sender and from!!
|
|
MimeMessage mailMessage = (MimeMessage) super.getMailMessage();
|
|
if (mailMessage != null) {
|
|
|
|
try {
|
|
/*
|
|
* Now Set Sender, From and ReplyTo addresses...
|
|
*/
|
|
|
|
// compute From address - can be overwritten by env mail.defaultSender
|
|
InternetAddress adr = getInternetAddress(getFrom(documentContext,
|
|
documentActivity));
|
|
if (adr == null) {
|
|
// in case of null we set an empty address here. This can happen in case
|
|
// of a RunAs Service EJB where the user context can not be resolved to a valid
|
|
// smtp address
|
|
if (debug) {
|
|
logger.warning("│ ├── from address was resolved to null");
|
|
}
|
|
// we will force a MessagingException...
|
|
adr = new InternetAddress("");
|
|
} else {
|
|
if (mailAuthenticatedSender.isPresent()) {
|
|
logger.info("├── 📭 set authenticated sender...");
|
|
String mailDefaultPattern = mailAuthenticatedSender.get();
|
|
String sender = mailDefaultPattern;
|
|
// Expected format "COMPANY - {username} <webmaster@info.com>"
|
|
int start = mailDefaultPattern.lastIndexOf('<');
|
|
int end = mailDefaultPattern.lastIndexOf('>');
|
|
if (start >= 0 && end >= 0) {
|
|
String senderDisplayName = mailDefaultPattern.substring(0, start);
|
|
sender = mailDefaultPattern.substring(start + 1, end);
|
|
logger.info("│ ├── sender='" + sender + "'");
|
|
mailMessage.setHeader("Sender", sender);
|
|
|
|
// create custom from...
|
|
String userName = this.getWorkflowService().getUserName();
|
|
String userDisplayName = userName;
|
|
String userEmail = userName;
|
|
ItemCollection profile = profileService.findProfileById(userName);
|
|
if (profile != null) {
|
|
userDisplayName = profile.getItemValueString("txtuserName");
|
|
userEmail = profile.getItemValueString("txtemail");
|
|
senderDisplayName = senderDisplayName.replace("{username}", userDisplayName);
|
|
} else {
|
|
logger.warning(
|
|
"├── ⚠️ no matching user profile found for " + userName);
|
|
}
|
|
InternetAddress fromAddress = new InternetAddress(sender, senderDisplayName);
|
|
mailMessage.setFrom(fromAddress);
|
|
logger.info(
|
|
"│ ├── from:" + fromAddress.getPersonal() + "<" + fromAddress.getAddress() + ">");
|
|
logger.info("│ ├── replyTo:" + userEmail);
|
|
InternetAddress[] replyToAddressList = new InternetAddress[1];
|
|
replyToAddressList[0] = getInternetAddress(userEmail);
|
|
mailMessage.setReplyTo(replyToAddressList);
|
|
|
|
} else {
|
|
// default behavior - set sender and reply only
|
|
logger.info("│ ├── sender='" + sender + "'");
|
|
mailMessage.setHeader("Sender", sender);
|
|
// Dow we have a replay to?
|
|
String sReplyTo = getReplyTo(documentContext, documentActivity);
|
|
if ((sReplyTo == null) || (sReplyTo.isEmpty())) {
|
|
sReplyTo = adr.getAddress();
|
|
}
|
|
logger.info("│ ├── replyTo:" + sReplyTo);
|
|
InternetAddress[] resplysAdrs = new InternetAddress[1];
|
|
resplysAdrs[0] = getInternetAddress(sReplyTo);
|
|
mailMessage.setReplyTo(resplysAdrs);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
} catch (MessagingException | UnsupportedEncodingException e) {
|
|
throw new PluginException(MailPlugin.class.getSimpleName(),
|
|
ERROR_MAIL_MESSAGE, e.getMessage(), e);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
}
|