2012-06-22 331 views
2

我尝试使用下面的代码来发送与GAE的Java附件的电子邮件:发送电子邮件附件

 String htmlBody = "<html><body><p>this is some text</p></body></html>"; 
     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 
     Message msg = new MimeMessage(session); 
     msg.setFrom(new InternetAddress("[email protected]", "My Name")); 
     msg.addRecipient(Message.RecipientType.TO, 
         new InternetAddress(payerEmail)); 
     msg.setSubject("Your order confirmation"); 

     Multipart mp = new MimeMultipart(); 

     MimeBodyPart htmlPart = new MimeBodyPart(); 
     htmlPart.setContent(htmlBody, "text/html"); 
     mp.addBodyPart(htmlPart); 

     MimeBodyPart attachment = new MimeBodyPart(); 
     attachment.setFileName("tc.MyCustomFile"); 
     attachment.setContent(byteArray, "application/octet-stream"); 
     mp.addBodyPart(attachment); 
     msg.setContent(mp); 
     //msg.set 
     Transport.send(msg); 

我得到这个异常:

javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Converting attachment data failed) 
    at javax.mail.Transport.send(Transport.java:163) 
    at javax.mail.Transport.send(Transport.java:48) 
    at com.xyz.samplepaypal.IPNListenerServlet.doPost(IPNListenerServlet.java:168) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:477) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:695) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: javax.mail.MessagingException: Converting attachment data failed 
    at com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:231) 
    at javax.mail.Transport.send(Transport.java:95) 
    ... 34 more 
+0

我没有看到 '字节组' 的声明。它是什么类型? –

+0

它是一个字节数组byte [] – AmaltasCoder

回答

0

我有.txt和.csv文件的相同问题。下面是我得到的错误:

  • 为.TXT:javax.mail.SendFailedException:发送失败 (javax.mail.MessagingException的:将文本转换身体失败)

  • 为.csv:将使用javax。 mail.SendFailedException:发送失败 (javax.mail.MessagingException的:转换附件数据失败)

我发现一种解决方法是使用低级API提议mar_novice

import com.google.appengine.api.mail.MailService.Attachment; 
import com.google.appengine.api.mail.MailService; 
import com.google.appengine.api.mail.MailServiceFactory; 

...

​​