cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Axeda: Email File From Data Accumulator

Garnet

Axeda: Email File From Data Accumulator

This code snippet finds an uploaded file associated with an asset and emails it to a destination email address.  It uses a data accumulator to create a temporary file.

import org.apache.commons.codec.binary.Base64;

import java.util.Date;

import java.util.Properties;

import java.io.StringWriter

import java.io.PrintWriter

import com.axeda.drm.sdk.Context

import com.axeda.drm.sdk.data.*

import com.axeda.drm.sdk.device.*

import groovy.json.JsonSlurper

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import org.apache.axiom.attachments.ByteArrayDataSource;

import com.axeda.platform.sdk.v1.services.ServiceFactory;

import com.thoughtworks.xstream.XStream;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

try {

    Context ctx = Context.create(parameters.username)

    DeviceFinder dfinder = new DeviceFinder(ctx)

    def bytes

    dfinder.setSerialNumber(parameters.serial_number)

    Device d = dfinder.find()

    UploadedFileFinder uff = new UploadedFileFinder(ctx)

    uff.device = d

    def ufiles = uff.findAll()

    UploadedFile ufile

    if (ufiles.size() > 0) {

        ufile = ufiles[0]

        File f = ufile.extractFile()

        def slurper = new JsonSlurper()

        def objects = slurper.parseText(f.getText())

        def bugreport = objects.objects[0].mobj_update[0].bugreport

        String from = "demo@axeda.com";

        String to = "destination@axeda.com";

        String subject = "My file";

        String mailContent = "Attaching test";

        String filename = "payload.tar.gz";

        def dataStoreIdentifier = "FILE-IO-SUB-testing"

        def daSvc = new ServiceFactory().dataAccumulatorService

        if (daSvc.doesAccumulationExist(dataStoreIdentifier, d.id.value)) {

            daSvc.deleteAccumulation(dataStoreIdentifier, d.id.value)

        }

        daSvc.writeChunk(dataStoreIdentifier, d.id.value, bugreport);

        InputStream is = daSvc.streamAccumulation(dataStoreIdentifier, d.id.value)

        Base64 base64 = new Base64()

        ByteArrayDataSource rawData = new ByteArrayDataSource(base64.decodeBase64(is.getBytes()));

        // You need to create a properties object to store mail server

        // smtp information such as the host name and the port number.

        // With this properties we create a Session object from

        // which we'll create the Message object.

        Properties properties = new Properties();

        properties.put("mail.smtp.host","mail01.bo2.axeda.com");

        properties.put("mail.smtp.port", "25");

        properties.put("mail.smtp.auth", "true");

        Authenticator authenticator = new CustomAuthenticator();

        Session session = Session.getInstance(properties, authenticator);

        MimeMessage message = new MimeMessage(session);

        message.setFrom(new InternetAddress(from));

        message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));

        message.setSubject(subject);

        message.setSentDate(new Date());

        // Set the email message text.

        MimeBodyPart messagePart = new MimeBodyPart();

        messagePart.setText(mailContent);

        // Set the email attachment file

        MimeBodyPart attachmentPart = new MimeBodyPart();

        //      FileDataSource fileDataSource = new FileDataSource(file)

        attachmentPart.setDataHandler(new DataHandler(rawData))  //fileDataSource));

        attachmentPart.setFileName(filename);

        Multipart multipart = new MimeMultipart();

        multipart.addBodyPart(messagePart);

        multipart.addBodyPart(attachmentPart);

        // Set the content

        message.setContent(multipart);

        // Send the message with attachment

        Transport.send(message);

    }

}

catch (Exception e) {

    logger.info(e.message)

    StringWriter logStringWriter = new StringWriter();

    PrintWriter logPrintWriter = new PrintWriter(logStringWriter)

    e.printStackTrace(logPrintWriter)

    logger.info(logStringWriter.toString())

}

// This class is the implementation of the Authenticator

// Where you need to implement the getPasswordAuthentication

// to provide the username and password

public class CustomAuthenticator extends Authenticator {

    protected PasswordAuthentication getPasswordAuthentication() {

        String username = "";

        String password = "";

        return new PasswordAuthentication(username, password);

    }

}

static byte[] getBytes(File file) throws IOException {

    return getBytes(new FileInputStream(file));

}

static byte[] getBytes(InputStream is) throws IOException {

    ByteArrayOutputStream answer = new ByteArrayOutputStream();

// reading the content of the file within a byte buffer

    byte[] byteBuffer = new byte[8192];

    int nbByteRead /* = 0*/;

    try {

        while ((nbByteRead = is.read(byteBuffer)) != -1) {

// appends buffer

            answer.write(byteBuffer, 0, nbByteRead);

        }

    } finally {

        is.close()

    }

    return answer.toByteArray();

}