use of com.axelor.apps.message.db.EmailAccount in project axelor-open-suite by axelor.
the class MailServiceBaseImpl method send.
@Override
public void send(final MailMessage message) throws MailException {
if (!appBaseService.isApp("base") || !appBaseService.getAppBase().getActivateSendingEmail()) {
return;
}
final EmailAccount emailAccount = mailAccountService.getDefaultSender();
if (emailAccount == null) {
super.send(message);
return;
}
Preconditions.checkNotNull(message, "mail message can't be null");
final Model related = findEntity(message);
final MailSender sender = getMailSender(emailAccount);
final Set<String> recipients = recipients(message, related);
if (recipients.isEmpty()) {
return;
}
final MailMessageRepository messages = Beans.get(MailMessageRepository.class);
for (String recipient : recipients) {
MailBuilder builder = sender.compose().subject(getSubject(message, related));
this.setRecipients(builder, recipient, related);
Model obj = Beans.get(MailService.class).resolve(recipient);
userName = null;
if (obj != null) {
Class<Model> klass = EntityHelper.getEntityClass(obj);
if (klass.equals(User.class)) {
User user = (User) obj;
userName = user.getName();
} else if (klass.equals(Partner.class)) {
Partner partner = (Partner) obj;
userName = partner.getSimpleFullName();
}
}
for (MetaAttachment attachment : messages.findAttachments(message)) {
final Path filePath = MetaFiles.getPath(attachment.getMetaFile());
final File file = filePath.toFile();
builder.attach(file.getName(), file.toString());
}
MimeMessage email;
try {
builder.html(template(message, related));
email = builder.build(message.getMessageId());
final Set<String> references = new LinkedHashSet<>();
if (message.getParent() != null) {
references.add(message.getParent().getMessageId());
}
if (message.getRoot() != null) {
references.add(message.getRoot().getMessageId());
}
if (!references.isEmpty()) {
email.setHeader("References", Joiner.on(" ").skipNulls().join(references));
}
} catch (MessagingException | IOException e) {
throw new MailException(e);
}
// send email using a separate process to void thread blocking
executor.submit(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
send(sender, email);
return true;
}
});
}
}
use of com.axelor.apps.message.db.EmailAccount in project axelor-open-suite by axelor.
the class TemplateMessageServiceImpl method generateMessage.
protected Message generateMessage(String model, Long objectId, Template template, Templates templates, Map<String, Object> templatesContext, Boolean isForTemporaryEmail) {
String content = "";
String subject = "";
String replyToRecipients = "";
String toRecipients = "";
String ccRecipients = "";
String bccRecipients = "";
String addressBlock = "";
int mediaTypeSelect;
String signature = "";
if (!Strings.isNullOrEmpty(template.getContent())) {
content = templates.fromText(template.getContent()).make(templatesContext).render();
}
if (!Strings.isNullOrEmpty(template.getAddressBlock())) {
addressBlock = templates.fromText(template.getAddressBlock()).make(templatesContext).render();
}
if (!Strings.isNullOrEmpty(template.getSubject())) {
subject = templates.fromText(template.getSubject()).make(templatesContext).render();
log.debug("Subject ::: {}", subject);
}
if (!Strings.isNullOrEmpty(template.getReplyToRecipients())) {
replyToRecipients = templates.fromText(template.getReplyToRecipients()).make(templatesContext).render();
log.debug("Reply to ::: {}", replyToRecipients);
}
if (template.getToRecipients() != null) {
toRecipients = templates.fromText(template.getToRecipients()).make(templatesContext).render();
log.debug("To ::: {}", toRecipients);
}
if (template.getCcRecipients() != null) {
ccRecipients = templates.fromText(template.getCcRecipients()).make(templatesContext).render();
log.debug("CC ::: {}", ccRecipients);
}
if (template.getBccRecipients() != null) {
bccRecipients = templates.fromText(template.getBccRecipients()).make(templatesContext).render();
log.debug("BCC ::: {}", bccRecipients);
}
mediaTypeSelect = this.getMediaTypeSelect(template);
log.debug("Media ::: {}", mediaTypeSelect);
if (template.getSignature() != null) {
signature = templates.fromText(template.getSignature()).make(templatesContext).render();
log.debug("Signature ::: {}", signature);
}
EmailAccount mailAccount = getMailAccount();
EmailAddress fromAddress = null;
if (mailAccount == null) {
TraceBackService.trace(new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.MAIL_ACCOUNT_6)));
} else {
fromAddress = getEmailAddress(mailAccount.getFromAddress());
}
Message message = messageService.createMessage(model, Math.toIntExact(objectId), subject, content, fromAddress, getEmailAddresses(replyToRecipients), getEmailAddresses(toRecipients), getEmailAddresses(ccRecipients), getEmailAddresses(bccRecipients), null, addressBlock, mediaTypeSelect, mailAccount, signature, isForTemporaryEmail);
return message;
}
use of com.axelor.apps.message.db.EmailAccount in project axelor-open-suite by axelor.
the class MailAccountController method fetchEmails.
public void fetchEmails(ActionRequest request, ActionResponse response) throws MessagingException, IOException {
EmailAccount account = request.getContext().asType(EmailAccount.class);
account = Beans.get(EmailAccountRepository.class).find(account.getId());
int totalFetched = Beans.get(MailAccountService.class).fetchEmails(account, true);
response.setFlash(I18n.get(String.format("Total email fetched: %s", totalFetched)));
}
use of com.axelor.apps.message.db.EmailAccount in project axelor-open-suite by axelor.
the class MailServiceMessageImpl method fetch.
@Override
public void fetch() throws MailException {
final EmailAccount emailAccount = mailAccountService.getDefaultReader();
if (emailAccount == null) {
super.fetch();
} else {
final MailReader reader = getMailReader(emailAccount);
final AuditableRunner runner = Beans.get(AuditableRunner.class);
runner.run(() -> {
try {
fetch(reader);
} catch (Exception e) {
log.error("Unable to fetch messages", e);
}
});
}
}
use of com.axelor.apps.message.db.EmailAccount in project axelor-open-suite by axelor.
the class DMSFileServiceImpl method sendEmail.
@Override
public void sendEmail(DMSFile dmsFile) throws AxelorException, MessagingException {
final EmailAccount emailAccount = mailAccountService.getDefaultSender();
User currentUser = AuthUtils.getUser();
User lockedBy = dmsFile.getLockedBy();
EmailAddress emailAddress = this.getEmailAddress(lockedBy);
String content = null;
String language = currentUser.getLanguage();
if (language != null && language.equals("fr")) {
content = String.format(CONTENT_EN, lockedBy.getFullName(), currentUser.getFullName());
} else {
content = String.format(CONTENT_EN, lockedBy.getFullName(), currentUser.getFullName());
}
List<EmailAddress> toEmailAddressList = new ArrayList<>();
toEmailAddressList.add(emailAddress);
Message message = messageService.createMessage(null, 0, I18n.get(SUBJECT), content, null, null, toEmailAddressList, null, null, null, null, MessageRepository.MEDIA_TYPE_EMAIL, emailAccount, null);
messageService.sendByEmail(message);
}
Aggregations