Search in sources :

Example 6 with DBMailAttachment

use of org.olat.core.util.mail.model.DBMailAttachment in project OpenOLAT by OpenOLAT.

the class MailManagerImpl method forwardToRealInbox.

@Override
public MailerResult forwardToRealInbox(Identity identity, DBMail mail, MailerResult result) {
    if (result == null) {
        result = new MailerResult();
    }
    List<DBMailAttachment> attachments = getAttachments(mail);
    Address to = createAddress(identity, result, true);
    MimeMessage message = createForwardMimeMessage(to, to, mail.getSubject(), mail.getBody(), attachments, result);
    if (message != null) {
        sendMessage(message, result);
    }
    return result;
}
Also used : DBMailAttachment(org.olat.core.util.mail.model.DBMailAttachment) InternetAddress(javax.mail.internet.InternetAddress) Address(javax.mail.Address) MailerResult(org.olat.core.util.mail.MailerResult) MimeMessage(javax.mail.internet.MimeMessage)

Example 7 with DBMailAttachment

use of org.olat.core.util.mail.model.DBMailAttachment in project OpenOLAT by OpenOLAT.

the class MailManagerImpl method saveDBMessage.

protected DBMail saveDBMessage(MailContext context, Identity fromId, String from, Identity toId, String to, Identity cc, List<ContactList> bccLists, String metaId, MailContent content, MailerResult result) {
    try {
        DBMailImpl mail = new DBMailImpl();
        if (result == null) {
            result = new MailerResult();
        }
        boolean makeRealMail = makeRealMail(toId, cc, bccLists);
        Address fromAddress = null;
        List<Address> toAddress = new ArrayList<Address>();
        List<Address> ccAddress = new ArrayList<Address>();
        List<Address> bccAddress = new ArrayList<Address>();
        if (fromId != null) {
            DBMailRecipient fromRecipient = new DBMailRecipient();
            fromRecipient.setRecipient(fromId);
            if (StringHelper.containsNonWhitespace(from)) {
                fromRecipient.setEmailAddress(from);
                fromAddress = createFromAddress(from, result);
            } else {
                fromAddress = createFromAddress(fromId, result);
            }
            fromRecipient.setVisible(Boolean.TRUE);
            fromRecipient.setMarked(Boolean.FALSE);
            fromRecipient.setDeleted(Boolean.FALSE);
            mail.setFrom(fromRecipient);
        } else {
            if (!StringHelper.containsNonWhitespace(from)) {
                from = WebappHelper.getMailConfig("mailFrom");
            }
            DBMailRecipient fromRecipient = new DBMailRecipient();
            fromRecipient.setEmailAddress(from);
            fromRecipient.setVisible(Boolean.TRUE);
            fromRecipient.setMarked(Boolean.FALSE);
            // marked as delted as nobody can read it
            fromRecipient.setDeleted(Boolean.TRUE);
            mail.setFrom(fromRecipient);
            fromAddress = createFromAddress(from, result);
        }
        if (result.getReturnCode() != MailerResult.OK) {
            return null;
        }
        mail.setMetaId(metaId);
        String subject = content.getSubject();
        if (subject != null && subject.length() > 500) {
            log.warn("Cut a too long subkect in name. Size: " + subject.length(), null);
            subject = subject.substring(0, 500);
        }
        mail.setSubject(subject);
        String body = content.getBody();
        if (body != null && body.length() > 16777210) {
            log.warn("Cut a too long body in mail. Size: " + body.length(), null);
            body = body.substring(0, 16000000);
        }
        mail.setBody(body);
        mail.setLastModified(new Date());
        if (context != null) {
            OLATResourceable ores = context.getOLATResourceable();
            if (ores != null) {
                String resName = ores.getResourceableTypeName();
                if (resName != null && resName.length() > 50) {
                    log.warn("Cut a too long resourceable type name in mail context: " + resName, null);
                    resName = resName.substring(0, 49);
                }
                mail.getContext().setResName(ores.getResourceableTypeName());
                mail.getContext().setResId(ores.getResourceableId());
            }
            String resSubPath = context.getResSubPath();
            if (resSubPath != null && resSubPath.length() > 2000) {
                log.warn("Cut a too long resSubPath in mail context: " + resSubPath, null);
                resSubPath = resSubPath.substring(0, 2000);
            }
            mail.getContext().setResSubPath(resSubPath);
            String businessPath = context.getBusinessPath();
            if (businessPath != null && businessPath.length() > 2000) {
                log.warn("Cut a too long resSubPath in mail context: " + businessPath, null);
                businessPath = businessPath.substring(0, 2000);
            }
            mail.getContext().setBusinessPath(businessPath);
        }
        // add to
        DBMailRecipient recipientTo = null;
        if (toId != null) {
            recipientTo = new DBMailRecipient();
            if (toId instanceof IdentityImpl) {
                recipientTo.setRecipient(toId);
            } else {
                to = toId.getUser().getProperty(UserConstants.EMAIL, null);
            }
            if (StringHelper.containsNonWhitespace(to)) {
                recipientTo.setEmailAddress(to);
            }
            recipientTo.setVisible(Boolean.TRUE);
            recipientTo.setDeleted(Boolean.FALSE);
            recipientTo.setMarked(Boolean.FALSE);
            recipientTo.setRead(Boolean.FALSE);
        } else if (StringHelper.containsNonWhitespace(to)) {
            recipientTo = new DBMailRecipient();
            recipientTo.setEmailAddress(to);
            recipientTo.setVisible(Boolean.TRUE);
            recipientTo.setDeleted(Boolean.TRUE);
            recipientTo.setMarked(Boolean.FALSE);
            recipientTo.setRead(Boolean.FALSE);
        }
        if (recipientTo != null) {
            mail.getRecipients().add(recipientTo);
            createAddress(toAddress, recipientTo, true, result, true);
        }
        if (makeRealMail && StringHelper.containsNonWhitespace(to)) {
            createAddress(toAddress, to);
        }
        if (cc != null) {
            DBMailRecipient recipient = new DBMailRecipient();
            if (cc instanceof IdentityImpl) {
                recipient.setRecipient(cc);
            } else {
                recipient.setEmailAddress(cc.getUser().getProperty(UserConstants.EMAIL, null));
            }
            recipient.setVisible(Boolean.TRUE);
            recipient.setDeleted(Boolean.FALSE);
            recipient.setMarked(Boolean.FALSE);
            recipient.setRead(Boolean.FALSE);
            mail.getRecipients().add(recipient);
            createAddress(ccAddress, recipient, false, result, true);
        }
        // add bcc recipients
        appendRecipients(mail, bccLists, toAddress, bccAddress, false, makeRealMail, result);
        dbInstance.getCurrentEntityManager().persist(mail);
        // save attachments
        List<File> attachments = content.getAttachments();
        if (attachments != null && !attachments.isEmpty()) {
            for (File attachment : attachments) {
                FileInputStream in = null;
                try {
                    DBMailAttachment data = new DBMailAttachment();
                    data.setSize(attachment.length());
                    data.setName(attachment.getName());
                    long checksum = FileUtils.checksum(attachment, new Adler32()).getValue();
                    data.setChecksum(new Long(checksum));
                    data.setMimetype(WebappHelper.getMimeType(attachment.getName()));
                    in = new FileInputStream(attachment);
                    String path = saveAttachmentToStorage(data.getName(), data.getMimetype(), checksum, attachment.length(), in);
                    data.setPath(path);
                    data.setMail(mail);
                    dbInstance.getCurrentEntityManager().persist(data);
                } catch (FileNotFoundException e) {
                    log.error("File attachment not found: " + attachment, e);
                } catch (IOException e) {
                    log.error("Error with file attachment: " + attachment, e);
                } finally {
                    IOUtils.closeQuietly(in);
                }
            }
        }
        if (makeRealMail) {
            // check that we send an email to someone
            if (!toAddress.isEmpty() || !ccAddress.isEmpty() || !bccAddress.isEmpty()) {
                sendRealMessage(fromAddress, toAddress, ccAddress, bccAddress, subject, body, attachments, result);
                if (result != null && !result.isSuccessful()) {
                    handleErrors(result, fromId, toId, cc, bccLists);
                }
            }
        }
        // update subscription
        for (DBMailRecipient recipient : mail.getRecipients()) {
            if (recipient.getRecipient() != null) {
                subscribe(recipient.getRecipient());
            }
        }
        SubscriptionContext subContext = getSubscriptionContext();
        notificationsManager.markPublisherNews(subContext, null, false);
        return mail;
    } catch (AddressException e) {
        log.error("Cannot send e-mail: ", e);
        result.setReturnCode(MailerResult.RECIPIENT_ADDRESS_ERROR);
        return null;
    }
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) Address(javax.mail.Address) MailerResult(org.olat.core.util.mail.MailerResult) OLATResourceable(org.olat.core.id.OLATResourceable) ArrayList(java.util.ArrayList) FileNotFoundException(java.io.FileNotFoundException) DBMailImpl(org.olat.core.util.mail.model.DBMailImpl) IdentityImpl(org.olat.basesecurity.IdentityImpl) IOException(java.io.IOException) Date(java.util.Date) FileInputStream(java.io.FileInputStream) Adler32(java.util.zip.Adler32) DBMailRecipient(org.olat.core.util.mail.model.DBMailRecipient) DBMailAttachment(org.olat.core.util.mail.model.DBMailAttachment) AddressException(javax.mail.internet.AddressException) SubscriptionContext(org.olat.core.commons.services.notifications.SubscriptionContext) File(java.io.File)

Example 8 with DBMailAttachment

use of org.olat.core.util.mail.model.DBMailAttachment in project openolat by klemens.

the class MailManagerImpl method saveDBMessage.

protected DBMail saveDBMessage(MailContext context, Identity fromId, String from, Identity toId, String to, Identity cc, List<ContactList> bccLists, String metaId, MailContent content, MailerResult result) {
    try {
        DBMailImpl mail = new DBMailImpl();
        if (result == null) {
            result = new MailerResult();
        }
        boolean makeRealMail = makeRealMail(toId, cc, bccLists);
        Address fromAddress = null;
        List<Address> toAddress = new ArrayList<Address>();
        List<Address> ccAddress = new ArrayList<Address>();
        List<Address> bccAddress = new ArrayList<Address>();
        if (fromId != null) {
            DBMailRecipient fromRecipient = new DBMailRecipient();
            fromRecipient.setRecipient(fromId);
            if (StringHelper.containsNonWhitespace(from)) {
                fromRecipient.setEmailAddress(from);
                fromAddress = createFromAddress(from, result);
            } else {
                fromAddress = createFromAddress(fromId, result);
            }
            fromRecipient.setVisible(Boolean.TRUE);
            fromRecipient.setMarked(Boolean.FALSE);
            fromRecipient.setDeleted(Boolean.FALSE);
            mail.setFrom(fromRecipient);
        } else {
            if (!StringHelper.containsNonWhitespace(from)) {
                from = WebappHelper.getMailConfig("mailFrom");
            }
            DBMailRecipient fromRecipient = new DBMailRecipient();
            fromRecipient.setEmailAddress(from);
            fromRecipient.setVisible(Boolean.TRUE);
            fromRecipient.setMarked(Boolean.FALSE);
            // marked as delted as nobody can read it
            fromRecipient.setDeleted(Boolean.TRUE);
            mail.setFrom(fromRecipient);
            fromAddress = createFromAddress(from, result);
        }
        if (result.getReturnCode() != MailerResult.OK) {
            return null;
        }
        mail.setMetaId(metaId);
        String subject = content.getSubject();
        if (subject != null && subject.length() > 500) {
            log.warn("Cut a too long subkect in name. Size: " + subject.length(), null);
            subject = subject.substring(0, 500);
        }
        mail.setSubject(subject);
        String body = content.getBody();
        if (body != null && body.length() > 16777210) {
            log.warn("Cut a too long body in mail. Size: " + body.length(), null);
            body = body.substring(0, 16000000);
        }
        mail.setBody(body);
        mail.setLastModified(new Date());
        if (context != null) {
            OLATResourceable ores = context.getOLATResourceable();
            if (ores != null) {
                String resName = ores.getResourceableTypeName();
                if (resName != null && resName.length() > 50) {
                    log.warn("Cut a too long resourceable type name in mail context: " + resName, null);
                    resName = resName.substring(0, 49);
                }
                mail.getContext().setResName(ores.getResourceableTypeName());
                mail.getContext().setResId(ores.getResourceableId());
            }
            String resSubPath = context.getResSubPath();
            if (resSubPath != null && resSubPath.length() > 2000) {
                log.warn("Cut a too long resSubPath in mail context: " + resSubPath, null);
                resSubPath = resSubPath.substring(0, 2000);
            }
            mail.getContext().setResSubPath(resSubPath);
            String businessPath = context.getBusinessPath();
            if (businessPath != null && businessPath.length() > 2000) {
                log.warn("Cut a too long resSubPath in mail context: " + businessPath, null);
                businessPath = businessPath.substring(0, 2000);
            }
            mail.getContext().setBusinessPath(businessPath);
        }
        // add to
        DBMailRecipient recipientTo = null;
        if (toId != null) {
            recipientTo = new DBMailRecipient();
            if (toId instanceof IdentityImpl) {
                recipientTo.setRecipient(toId);
            } else {
                to = toId.getUser().getProperty(UserConstants.EMAIL, null);
            }
            if (StringHelper.containsNonWhitespace(to)) {
                recipientTo.setEmailAddress(to);
            }
            recipientTo.setVisible(Boolean.TRUE);
            recipientTo.setDeleted(Boolean.FALSE);
            recipientTo.setMarked(Boolean.FALSE);
            recipientTo.setRead(Boolean.FALSE);
        } else if (StringHelper.containsNonWhitespace(to)) {
            recipientTo = new DBMailRecipient();
            recipientTo.setEmailAddress(to);
            recipientTo.setVisible(Boolean.TRUE);
            recipientTo.setDeleted(Boolean.TRUE);
            recipientTo.setMarked(Boolean.FALSE);
            recipientTo.setRead(Boolean.FALSE);
        }
        if (recipientTo != null) {
            mail.getRecipients().add(recipientTo);
            createAddress(toAddress, recipientTo, true, result, true);
        }
        if (makeRealMail && StringHelper.containsNonWhitespace(to)) {
            createAddress(toAddress, to);
        }
        if (cc != null) {
            DBMailRecipient recipient = new DBMailRecipient();
            if (cc instanceof IdentityImpl) {
                recipient.setRecipient(cc);
            } else {
                recipient.setEmailAddress(cc.getUser().getProperty(UserConstants.EMAIL, null));
            }
            recipient.setVisible(Boolean.TRUE);
            recipient.setDeleted(Boolean.FALSE);
            recipient.setMarked(Boolean.FALSE);
            recipient.setRead(Boolean.FALSE);
            mail.getRecipients().add(recipient);
            createAddress(ccAddress, recipient, false, result, true);
        }
        // add bcc recipients
        appendRecipients(mail, bccLists, toAddress, bccAddress, false, makeRealMail, result);
        dbInstance.getCurrentEntityManager().persist(mail);
        // save attachments
        List<File> attachments = content.getAttachments();
        if (attachments != null && !attachments.isEmpty()) {
            for (File attachment : attachments) {
                FileInputStream in = null;
                try {
                    DBMailAttachment data = new DBMailAttachment();
                    data.setSize(attachment.length());
                    data.setName(attachment.getName());
                    long checksum = FileUtils.checksum(attachment, new Adler32()).getValue();
                    data.setChecksum(new Long(checksum));
                    data.setMimetype(WebappHelper.getMimeType(attachment.getName()));
                    in = new FileInputStream(attachment);
                    String path = saveAttachmentToStorage(data.getName(), data.getMimetype(), checksum, attachment.length(), in);
                    data.setPath(path);
                    data.setMail(mail);
                    dbInstance.getCurrentEntityManager().persist(data);
                } catch (FileNotFoundException e) {
                    log.error("File attachment not found: " + attachment, e);
                } catch (IOException e) {
                    log.error("Error with file attachment: " + attachment, e);
                } finally {
                    IOUtils.closeQuietly(in);
                }
            }
        }
        if (makeRealMail) {
            // check that we send an email to someone
            if (!toAddress.isEmpty() || !ccAddress.isEmpty() || !bccAddress.isEmpty()) {
                sendRealMessage(fromAddress, toAddress, ccAddress, bccAddress, subject, body, attachments, result);
                if (result != null && !result.isSuccessful()) {
                    handleErrors(result, fromId, toId, cc, bccLists);
                }
            }
        }
        // update subscription
        for (DBMailRecipient recipient : mail.getRecipients()) {
            if (recipient.getRecipient() != null) {
                subscribe(recipient.getRecipient());
            }
        }
        SubscriptionContext subContext = getSubscriptionContext();
        notificationsManager.markPublisherNews(subContext, null, false);
        return mail;
    } catch (AddressException e) {
        log.error("Cannot send e-mail: ", e);
        result.setReturnCode(MailerResult.RECIPIENT_ADDRESS_ERROR);
        return null;
    }
}
Also used : InternetAddress(javax.mail.internet.InternetAddress) Address(javax.mail.Address) MailerResult(org.olat.core.util.mail.MailerResult) OLATResourceable(org.olat.core.id.OLATResourceable) ArrayList(java.util.ArrayList) FileNotFoundException(java.io.FileNotFoundException) DBMailImpl(org.olat.core.util.mail.model.DBMailImpl) IdentityImpl(org.olat.basesecurity.IdentityImpl) IOException(java.io.IOException) Date(java.util.Date) FileInputStream(java.io.FileInputStream) Adler32(java.util.zip.Adler32) DBMailRecipient(org.olat.core.util.mail.model.DBMailRecipient) DBMailAttachment(org.olat.core.util.mail.model.DBMailAttachment) AddressException(javax.mail.internet.AddressException) SubscriptionContext(org.olat.core.commons.services.notifications.SubscriptionContext) File(java.io.File)

Aggregations

DBMailAttachment (org.olat.core.util.mail.model.DBMailAttachment)8 ArrayList (java.util.ArrayList)4 Date (java.util.Date)4 Address (javax.mail.Address)4 InternetAddress (javax.mail.internet.InternetAddress)4 MimeMessage (javax.mail.internet.MimeMessage)4 MailerResult (org.olat.core.util.mail.MailerResult)4 DBMailRecipient (org.olat.core.util.mail.model.DBMailRecipient)4 VFSLeaf (org.olat.core.util.vfs.VFSLeaf)4 File (java.io.File)2 FileInputStream (java.io.FileInputStream)2 FileNotFoundException (java.io.FileNotFoundException)2 IOException (java.io.IOException)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 HashSet (java.util.HashSet)2 Adler32 (java.util.zip.Adler32)2 DataHandler (javax.activation.DataHandler)2 DataSource (javax.activation.DataSource)2 FileDataSource (javax.activation.FileDataSource)2 BodyPart (javax.mail.BodyPart)2