Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't send mail with attachment #8293

Closed
hjelmevold opened this issue Aug 24, 2020 · 2 comments
Closed

Can't send mail with attachment #8293

hjelmevold opened this issue Aug 24, 2020 · 2 comments
Assignees
Labels
Milestone

Comments

@hjelmevold
Copy link
Member

hjelmevold commented Aug 24, 2020

XP version: 7.3.1
Java version: Tested both in enonic sandbox and standalone with OpenJDK Runtime Environment Zulu11.41+23-CA (build 11.0.8+10-LTS)
Installed apps: app-superhero-blog

In a JavaScript controller, trying to send an e-mail with one or more attachments with data from getAttachmentStream() on an image from the default cms repo fails with stack trace. I've verified that getAttachmentStream() returns actual data. If you comment out the line with attachments: … the e-mail will be sent without any issues.

JavaScript controller code, using data from Superhero App as an example:

mailLib.send({
	from: 'email@example.com',
	to: 'email@example.com',
	subject: 'subject',
	body: 'body',
	attachments: [{
		fileName: 'superhero_5.jpg',
		mimeType: 'image/jpeg',
		data: contentLib.getAttachmentStream({
	                key: '/superhero/posts/featured-image/superhero_5.jpg',
	                name: 'superhero_5.jpg'
	        });
	}]
});

Stack trace:

2020-08-24 10:21:56,042 WARN  c.enonic.xp.lib.mail.SendMailHandler - Mail could not be sent
com.enonic.xp.mail.MailException: IOException while sending message
	at com.enonic.xp.mail.impl.MailServiceImpl.handleException(MailServiceImpl.java:65)
	at com.enonic.xp.mail.impl.MailServiceImpl.send(MailServiceImpl.java:53)
	at com.enonic.xp.lib.mail.SendMailHandler.send(SendMailHandler.java:116)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4092$2349A$mail.L:1#send(com.enonic.app.formbuilder:/lib/xp/mail.js:66)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4084$10077AAAAA$form_response.L:1#sendEmailToRecipients(com.enonic.app.formbuilder:/lib/form-builder/form-response.js:416)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4065$2855AAAAA$form_response.L:1#receiveForm(com.enonic.app.formbuilder:/lib/form-builder/form-response.js:131)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4063$837AAA$form_response.L:1#save(com.enonic.app.formbuilder:/lib/form-builder/form-response.js:22)
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$4062$5262A$form_part.L:1#post(com.enonic.app.formbuilder:/site/parts/form-part/form-part.js:169)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(Unknown Source)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(Unknown Source)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(Unknown Source)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror.call(Unknown Source)
	at com.enonic.xp.script.impl.value.FunctionScriptValue.call(FunctionScriptValue.java:36)
	at com.enonic.xp.script.impl.executor.ScriptExportsImpl.executeMethod(ScriptExportsImpl.java:59)
	at com.enonic.xp.portal.impl.controller.ControllerScriptImpl.doExecute(ControllerScriptImpl.java:71)
	at com.enonic.xp.portal.impl.controller.ControllerScriptImpl.lambda$execute$0(ControllerScriptImpl.java:36)
	at com.enonic.xp.trace.Tracer.traceEx(Tracer.java:72)
	at com.enonic.xp.trace.Tracer.trace(Tracer.java:51)
	at com.enonic.xp.trace.Tracer.trace(Tracer.java:98)
	at com.enonic.xp.portal.impl.controller.ControllerScriptImpl.execute(ControllerScriptImpl.java:36)
	at com.enonic.xp.portal.impl.rendering.DescriptorBasedComponentRenderer.doRender(DescriptorBasedComponentRenderer.java:75)
	at com.enonic.xp.portal.impl.rendering.DescriptorBasedComponentRenderer.render(DescriptorBasedComponentRenderer.java:43)
	at com.enonic.xp.portal.impl.rendering.DescriptorBasedComponentRenderer.render(DescriptorBasedComponentRenderer.java:22)
	at com.enonic.xp.portal.impl.rendering.RendererDelegateImpl.lambda$render$1(RendererDelegateImpl.java:40)
	at java.base/java.util.Optional.map(Unknown Source)
	at com.enonic.xp.portal.impl.rendering.RendererDelegateImpl.render(RendererDelegateImpl.java:40)
	at com.enonic.xp.portal.impl.handler.render.ComponentHandlerWorker.execute(ComponentHandlerWorker.java:123)
	at com.enonic.xp.portal.impl.handler.render.ComponentHandler.doHandle(ComponentHandler.java:66)
	at com.enonic.xp.portal.impl.handler.render.ComponentHandler.doHandle(ComponentHandler.java:23)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.portal.handler.BasePortalHandler.doHandle(BasePortalHandler.java:46)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.impl.trace.TraceWebFilter.doHandle(TraceWebFilter.java:38)
	at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
	at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
	at com.enonic.xp.web.impl.handler.WebDispatcherImpl.dispatch(WebDispatcherImpl.java:44)
	at com.enonic.xp.web.impl.handler.WebDispatcherServlet.doHandle(WebDispatcherServlet.java:142)
	at com.enonic.xp.web.impl.handler.WebDispatcherServlet.service(WebDispatcherServlet.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at com.enonic.xp.web.impl.dispatch.mapping.ServletDefinitionImpl.service(ServletDefinitionImpl.java:40)
	at com.enonic.xp.web.impl.dispatch.pipeline.ServletPipelineImpl.service(ServletPipelineImpl.java:40)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:45)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at com.enonic.xp.portal.impl.idprovider.IdProviderFilter.doHandle(IdProviderFilter.java:45)
	at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
	at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
	at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at com.enonic.xp.web.impl.auth.BasicAuthFilter.doHandle(BasicAuthFilter.java:34)
	at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
	at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
	at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at com.enonic.xp.web.impl.context.ContextFilter.lambda$doHandle$0(ContextFilter.java:33)
	at com.enonic.xp.context.ContextImpl.callWith(ContextImpl.java:102)
	at com.enonic.xp.web.impl.context.ContextFilter.doHandle(ContextFilter.java:32)
	at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
	at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
	at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at com.enonic.xp.web.vhost.impl.VirtualHostFilter.doHandle(VirtualHostFilter.java:60)
	at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
	at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
	at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at com.enonic.xp.web.impl.dos.DosFilterWrapper.doFilter(DosFilterWrapper.java:65)
	at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at org.eclipse.jetty.servlets.HeaderFilter.doFilter(HeaderFilter.java:117)
	at com.enonic.xp.web.impl.header.HeaderFilterWrapper.doHandle(HeaderFilterWrapper.java:51)
	at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
	at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
	at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
	at com.enonic.xp.web.impl.dispatch.pipeline.FilterPipelineImpl.filter(FilterPipelineImpl.java:39)
	at com.enonic.xp.web.impl.dispatch.DispatchServletImpl.service(DispatchServletImpl.java:52)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:717)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1363)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1278)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:249)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:500)
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: javax.mail.MessagingException: IOException while sending message
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1350)
	at com.enonic.xp.mail.impl.MailServiceImpl.doSend(MailServiceImpl.java:77)
	at com.enonic.xp.mail.impl.MailServiceImpl.send(MailServiceImpl.java:49)
	... 140 common frames omitted
Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed;
	boundary="----=_Part_12_1210396003.1598257309788"
	at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:879)
	at javax.activation.DataHandler.writeTo(DataHandler.java:300)
	at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1670)
	at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1880)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1300)
	... 142 common frames omitted

XP also starts with the following warning in the log… no idea if it's relevant:

2020-08-24 11:35:35,129 WARN  javax.mail - expected resource not found: /META-INF/javamail.default.address.map
@hjelmevold
Copy link
Member Author

First Google result for Exception suggests the problem might have to do with classloader:
https://stackoverflow.com/questions/54914584/no-object-dch-for-mime-type-multipart-mixed

@rymsha rymsha self-assigned this Aug 24, 2020
@rymsha
Copy link
Contributor

rymsha commented Aug 27, 2020

#7324

@rymsha rymsha modified the milestones: 7.3.2, 7.5.0 Aug 27, 2020
@rymsha rymsha changed the title lib-mail send with attachment: no object DCH for MIME type multipart/mixed lib-mail can't send mail with attachment Sep 3, 2020
@rymsha rymsha changed the title lib-mail can't send mail with attachment Can't send mail with attachment Sep 3, 2020
rymsha added a commit that referenced this issue Sep 3, 2020
rymsha added a commit that referenced this issue Sep 3, 2020
rymsha added a commit that referenced this issue Sep 4, 2020
(cherry picked from commit cfab63e)
rymsha added a commit that referenced this issue Sep 4, 2020
(cherry picked from commit cfab63e)
rymsha added a commit that referenced this issue Sep 4, 2020
(cherry picked from commit cfab63e)
rymsha added a commit that referenced this issue Sep 4, 2020
(cherry picked from commit cfab63e)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants