views:

23

answers:

2

When trying to send email using the following code:

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("noreply@${appId}.appspotmail.com", "Some Name"));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailAddress, name));
msg.setSubject("Subject");
msg.setContent(email.toString(), "text/html");

Transport.send(msg);

I get the following error:

com.example.web.EmailController newsletterSend: Email not sent to
"real mail here".
javax.mail.SendFailedException: MailService IO failed
(java.io.IOException: Internal error)
        at
com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:
253)
        at javax.mail.Transport.send(Transport.java:95)
        at javax.mail.Transport.send(Transport.java:48)
        at com.example.web.EmailController.sendMailTo(EmailController.java:
73)
        at com.example.EmailController.newsletterSend(EmailController.java:
168)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_
$1.run(Method_.java:165)
        at java.security.AccessController.doPrivileged(Native Method)
        at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.privilegedInvoke(Method_.java:
163)
        at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke_(Method_.java:
124)
        at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke(Method_.java:
43)
        at
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:
174)
        at
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:
421)
        at
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:
409)
        at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:
771)
        at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:
716)
        at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:
644)
        at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:
560)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
511)
        at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
        at
com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:
111)
        at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
        at
com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:
97)
        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:
238)
        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.handleRequest(JavaRuntime.java:
250)
        at com.google.apphosting.base.RuntimePb$EvaluationRuntime
$6.handleBlockingRequest(RuntimePb.java:7115)
        at com.google.apphosting.base.RuntimePb$EvaluationRuntime
$6.handleBlockingRequest(RuntimePb.java:7113)
        at
com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:
24)
        at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:
398)
        at com.google.net.rpc.impl.Server$2.run(Server.java:852)
        at
com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:
56)
        at
com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:
576)
        at com.google.net.rpc.impl.Server.startRpc(Server.java:807)
        at com.google.net.rpc.impl.Server.processRequest(Server.java:369)
        at
com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:
442)
        at
com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:
319)
        at
com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:
290)
        at com.google.net.async.Connection.handleReadEvent(Connection.java:
474)
        at
com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:
831)
        at
com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:
207)
        at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:
103)
        at
com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:
251)
        at com.google.apphosting.runtime.JavaRuntime
$RpcRunnable.run(JavaRuntime.java:417)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Internal error
        at
com.google.appengine.api.mail.MailServiceImpl.doSend(MailServiceImpl.java:
111)
        at
com.google.appengine.api.mail.MailServiceImpl.send(MailServiceImpl.java:
32)
        at
com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:
247)
        ... 65 more 

Any idea as to why? What's even more worrisome is that this is also consuming my quota.

+1  A: 

You should post your code. Mine is working

public static String SendMail(String htmlText,String email,String sub)
{       
    String SMTP_AUTH_USER ="[email protected]";     
    Properties props = new Properties(); 
    Session session = Session.getDefaultInstance(props, null);   
    try 
    { 
        Message msg = new MimeMessage(session);            
        msg.setFrom(new InternetAddress(SMTP_AUTH_USER, "RQT")); 
        msg.addRecipient(Message.RecipientType.TO,new InternetAddress(email)); 
        msg.setSubject(sub);            
        msg.setContent(htmlText, "text/html");
        Transport.send(msg); 
        return "";              
    } 
    catch (Exception e) 
    {
        return e.getMessage();
    }


}
Manjoor
Thanks, I've updated the question with the code.
Robert Munteanu
A: 

The root cause was that the email addresses were wrapped in ", e.g. "[email protected]". I have reported the problem and hopefully we'll get a better error message next time.

Robert Munteanu