You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@nifi.apache.org by Eric Chaves <er...@uolet.com> on 2017/10/22 05:15:49 UTC

ImportingCan I import javax in a script processor?

Hi folks,

I'm writing a script processor to send email messages with an attachment.
After reading the putEmail processor and googling a little bit I came up
with the attached script however my script throws exceptions when importing
any javax.mail  classes (ex.: unable to resolve class
javax.mail.util.ByteArrayDataSource)

Can I import javax in a scripted processor?

Thanks.

ps: below is my current script code.

import org.apache.nifi.controller.ControllerService
import org.apache.nifi.lookup.StringLookupService

import javax.activation.DataHandler
import javax.mail.Authenticator
import javax.mail.Message
import javax.mail.Message.RecipientType
import javax.mail.MessagingException
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
import javax.mail.internet.PreencodedMimeBodyPart
import javax.mail.util.ByteArrayDataSource

def lookup = context.controllerServiceLookup
def smtpServiceId =
lookup.getControllerServiceIdentifiers(ControllerService).find
{
cs -> lookup.getControllerServiceName(cs) == SmtpServiceName.value
}

def flowFile = session.get()
if (flowFile == null) return;

def hostname = lookup.getControllerService(smtpServiceId)?.lookup(['key':
'hostname']).get()
def username = lookup.getControllerService(smtpServiceId)?.lookup(['key':
'username']).get()
def password = lookup.getControllerService(smtpServiceId)?.lookup(['key':
'password']).get()
def subject = Subject.evaluateAttributeExpressions(flowFile).value
def from = From.evaluateAttributeExpressions(flowFile).value
def to = To.evaluateAttributeExpressions(flowFile).value
def html = HtmlMessage.evaluateAttributeExpressions(flowFile).value
def bcc = Bcc.evaluateAttributeExpressions(flowFile).value
//def text = TextMessage ?
TextMessage.evaluateAttributeExpressions(flowFile).value : null

log.info("Mailer info: hostname=${hostname}, username=${username}, subject=
${subject}, from=${from}, to=${to}, bcc=${bcc}")

try{
Properties props = new Properties()
props.setProperty("mail.transport.protocol","smtp")
props.setProperty("mail.smtp.host",host)
props.setProperty("mail.smtp.port",port)
Session session = Session.getDefaultInstance(props,null)
MimeMessage message = new MimeMessage(session)
message.addFrom(new InternetAddress(from));
message.setRecipients(RecipientType.TO, new InternetAddress(to))
message.setRecipients(RecipientType.BCC, new InternetAddress(bcc))
message.setHeader('X-Mailer', 'nifi mailer 1.0')
message.setSubject(subject)

MimeMultipart multipart = new MimeMultipart()
MimeBodyPart htmlPart = new MimeBodyPart()
htmlPart.setContent(message,"text/html; charset=utf-8")
multipart.addBodyPart(htmlPart)

MimeBodyPart pdfPart = new MimeBodyPart()
session.read(flowFile, {inputStream ->
pdfPart.setDataHandler(new DataHandler(new ByteArrayDataSource(inputStream,
"application/pdf")));
pdfPart.setFileName("invoice.pdf")
} as InputStreamCallback)

if(pdfPart.getSize()){
multipart.addBodyPart(pdfPart)
}

message.setContent(multipart)
Transport.send(message)

session.transfer(flowFile, REL_SUCCESS)
} catch(Exception ex) {
log.error(ex.toString())
log.error(ex.getStackTrace())
flowFile = session.putAttribute(flowFile, 'Error', ex.toString())
session.transfer(flowFile, REL_FAILURE)
}