Search in sources :

Example 1 with MailException

use of com.axelor.mail.MailException 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;
            }
        });
    }
}
Also used : Path(java.nio.file.Path) LinkedHashSet(java.util.LinkedHashSet) EmailAccount(com.axelor.apps.message.db.EmailAccount) User(com.axelor.auth.db.User) MessagingException(javax.mail.MessagingException) MailSender(com.axelor.mail.MailSender) IOException(java.io.IOException) MailBuilder(com.axelor.mail.MailBuilder) MessagingException(javax.mail.MessagingException) MailException(com.axelor.mail.MailException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) MailMessageRepository(com.axelor.mail.db.repo.MailMessageRepository) MailService(com.axelor.mail.service.MailService) MimeMessage(javax.mail.internet.MimeMessage) Model(com.axelor.db.Model) MailException(com.axelor.mail.MailException) Partner(com.axelor.apps.base.db.Partner) File(java.io.File) MetaAttachment(com.axelor.meta.db.MetaAttachment)

Example 2 with MailException

use of com.axelor.mail.MailException 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);
            }
        });
    }
}
Also used : MailReader(com.axelor.mail.MailReader) EmailAccount(com.axelor.apps.message.db.EmailAccount) AuditableRunner(com.axelor.auth.AuditableRunner) MessagingException(javax.mail.MessagingException) AddressException(javax.mail.internet.AddressException) IOException(java.io.IOException) MailException(com.axelor.mail.MailException)

Example 3 with MailException

use of com.axelor.mail.MailException in project axelor-open-suite by axelor.

the class MailServiceMessageImpl method send.

@Override
public void send(final MailMessage message) throws MailException {
    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);
    final MailBuilder builder = sender.compose().subject(getSubject(message, related));
    for (String recipient : recipients) {
        builder.to(recipient);
    }
    for (MetaAttachment attachment : messages.findAttachments(message)) {
        final Path filePath = MetaFiles.getPath(attachment.getMetaFile());
        final File file = filePath.toFile();
        builder.attach(file.getName(), file.toString());
    }
    final 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;
        }
    });
}
Also used : Path(java.nio.file.Path) LinkedHashSet(java.util.LinkedHashSet) EmailAccount(com.axelor.apps.message.db.EmailAccount) MessagingException(javax.mail.MessagingException) MailSender(com.axelor.mail.MailSender) IOException(java.io.IOException) MailBuilder(com.axelor.mail.MailBuilder) MessagingException(javax.mail.MessagingException) AddressException(javax.mail.internet.AddressException) IOException(java.io.IOException) MailException(com.axelor.mail.MailException) MailMessageRepository(com.axelor.mail.db.repo.MailMessageRepository) MimeMessage(javax.mail.internet.MimeMessage) Model(com.axelor.db.Model) MailException(com.axelor.mail.MailException) File(java.io.File) MetaAttachment(com.axelor.meta.db.MetaAttachment)

Aggregations

EmailAccount (com.axelor.apps.message.db.EmailAccount)3 MailException (com.axelor.mail.MailException)3 IOException (java.io.IOException)3 MessagingException (javax.mail.MessagingException)3 Model (com.axelor.db.Model)2 MailBuilder (com.axelor.mail.MailBuilder)2 MailSender (com.axelor.mail.MailSender)2 MailMessageRepository (com.axelor.mail.db.repo.MailMessageRepository)2 MetaAttachment (com.axelor.meta.db.MetaAttachment)2 File (java.io.File)2 Path (java.nio.file.Path)2 LinkedHashSet (java.util.LinkedHashSet)2 AddressException (javax.mail.internet.AddressException)2 MimeMessage (javax.mail.internet.MimeMessage)2 Partner (com.axelor.apps.base.db.Partner)1 AuditableRunner (com.axelor.auth.AuditableRunner)1 User (com.axelor.auth.db.User)1 MailReader (com.axelor.mail.MailReader)1 MailService (com.axelor.mail.service.MailService)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1