[mule-dev] Problem sending pdf as attachment using smtp outbound endpoint

19 views
Skip to first unread message

Arun Menon

unread,
Oct 28, 2010, 3:01:28 AM10/28/10
to d...@mule.codehaus.org
I am trying to send a pdf as an attachment . I created a custom transformer extending ObjectToMimeMessage which takes the message payload. It creates a dataHandler using ByteArrayDataSource (message.getPayloadAsBytes(),"application/pdf") .After that it does a message.addAttachment(handler).

However , when i run my mule config. A runtime stack trace is thrown.

org.mule.api.transport.DispatchException: The object transformed is of type: "byte[]", but the expected return type is "Message". Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=smtp://IHICPSOL_test:<password>@192.168.105.74, connector=SmtpConnector{this=173eca6, started=true, initialised=true, name='connector.smtp.0', disposed=false, numberOfConcurrentTransactedReceivers=4, createMultipleTransactedReceivers=true, connected=true, supportedProtocols=[smtp], serviceOverrides=null}, transformer=[ICPPdfAttachmentTransformer{this=15c40eb, name='pdfAttachmentTransformer', ignoreBadInput=false, returnClass=class javax.mail.Message, sourceTypes=[class java.lang.String]}], name='endpoint.smtp.IHICPSOL.test.168.105.74.25', properties={toAddresses=IHICPS...@TestSMTP.com, subject=Message from icp output processor}, transactionConfig=Transaction{factory=null, action=NEVER, timeout=0}, filter=null, deleteUnacceptedMessages=false, securityFilter=null, synchronous=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8}. Message payload is of type: byte[]
at org.mule.transport.email.SmtpMessageDispatcher.doDispatch(SmtpMessageDispatcher.java:94)
at org.mule.transport.AbstractMessageDispatcher.dispatch(AbstractMessageDispatcher.java:105)
at org.mule.transport.AbstractConnector$DispatchWorker.doRun(AbstractConnector.java:2561)
at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:41)
at org.mule.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:619)

Do I need to apply some other transformer before i can use my custom transformer?

Please help me out here.

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email


Dirk Olmes

unread,
Oct 28, 2010, 7:53:44 AM10/28/10
to d...@mule.codehaus.org
On 10/28/2010 09:01 AM, Arun Menon wrote:
> I am trying to send a pdf as an attachment . I created a custom
> transformer extending ObjectToMimeMessage which takes the message
> payload. It creates a dataHandler using ByteArrayDataSource
> (message.getPayloadAsBytes(),"application/pdf") .After that it does a
> message.addAttachment(handler).
>
> However , when i run my mule config. A runtime stack trace is thrown.

Well, obviously you need to throw an object-to-mime-message transformer
into the mix.

-dirk

Arun Menon

unread,
Oct 29, 2010, 12:05:00 AM10/29/10
to d...@mule.codehaus.org
Hi Dirk,

I tried the string-to-email-transformer as the first step in the outbound transformer for smtp end point . I am receiving the pdf payload in file-inbound-endpoint and doing file:file-to-String-transformer to get a String representation.

However , in my custom transformer, i am getting this error. This is coming when i get the datahandler instance


javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.IOException: "text/plain" DataContentHandler requires String object, was given object of type class javax.mail.internet.MimeMessage
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:625)
at org.mule.transport.email.SmtpMessageDispatcher.sendMailMessage(SmtpMessageDispatcher.java:128)
at org.mule.transport.email.SmtpMessageDispatcher.doDispatch(SmtpMessageDispatcher.java:101)


at org.mule.transport.AbstractMessageDispatcher.dispatch(AbstractMessageDispatcher.java:105)
at org.mule.transport.AbstractConnector$DispatchWorker.doRun(AbstractConnector.java:2561)
at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:41)
at org.mule.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:619)

Caused by: java.io.IOException: "text/plain" DataContentHandler requires String object, was given object of type class javax.mail.internet.MimeMessage
at com.sun.mail.handlers.text_plain.writeTo(text_plain.java:121)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:868)
at javax.activation.DataHandler.writeTo(DataHandler.java:301)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1683)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:585)
... 9 more
I am also attaching the transformer code which i am using right now . The transformer extends ObjectToMimeMessage
Please let me know if you have any inputs

Dirk Olmes

unread,
Oct 29, 2010, 1:40:30 AM10/29/10
to d...@mule.codehaus.org
instead of guessing we should have a look at your config.

-dirk

Arun Menon

unread,
Oct 29, 2010, 2:08:27 AM10/29/10
to d...@mule.codehaus.org
Attaching the mule config.

Arun Menon

unread,
Oct 29, 2010, 4:52:03 AM10/29/10
to d...@mule.codehaus.org
I made some more changes now. I have added a transformer for the file:inbound-endpoint which takes the message and adds the payload content in the attachment section.
One the SMTP out-bound end point, i am adding the <email:object-to-mime-transformer/>. Now I am getting the following stacktrace when running mule.

javax.mail.internet.ParseException: Expected parameter value, got "null"
at javax.mail.internet.ParameterList.<init>(ParameterList.java:169)
at javax.mail.internet.ContentDisposition.<init>(ContentDisposition.java:87)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1307)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1001)
at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:333)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1255)
at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2012)
at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:1980)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1680)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:585)


at org.mule.transport.email.SmtpMessageDispatcher.sendMailMessage(SmtpMessageDispatcher.java:128)
at org.mule.transport.email.SmtpMessageDispatcher.doDispatch(SmtpMessageDispatcher.java:101)

at org.mule.transport.AbstractMessageDispatcher.dispatch(AbstractMessageDispatcher.java:105)
at org.mule.transport.AbstractConnector$DispatchWorker.doRun(AbstractConnector.java:2561)
at org.mule.work.AbstractMuleEventWork.run(AbstractMuleEventWork.java:41)
at org.mule.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:619)

Not sure which connector property it is accepting .
I am attaching the config file and transformer code again for ur reference

Tom Purcell

unread,
Oct 29, 2010, 11:03:59 AM10/29/10
to d...@mule.codehaus.org
Hello

Forgive me for hijacking the thread but I'm having the exact same issue. See the following on the user forum: [JMS Payload to PDF Email Attachment|http://forums.mulesoft.org/thread.jspa?threadID=4198&tstart=0].

Thanks
Tom

Reply all
Reply to author
Forward
0 new messages