Sending emails with Google AppEngine is quite straight forward once you get a hang of things. I ran into some issues, for example I never got the high level api’s to work. The code executed but the emails were never received. Instead I went for Google AppEngines own “low level” api, it worked much better.

What I did is that I set up a really simple MailService, similar to that which is installed with the Mail plug in. However, I do not handle templates instead I just send strings with the mail message.

package mail  
import com.google.appengine.api.mail.MailService  
import com.google.appengine.api.mail.MailService.Message  
import com.google.appengine.api.mail.MailServiceFactory  
import javax.mail.MessagingException  
import javax.mail.internet.AddressException  
class MailService {  
    boolean transactional = true
    def sendMail(subject, msgBody, too) {
        try {
        def service = MailServiceFactory.getMailService();
        def msg = new com.google.appengine.api.mail.MailService.Message();
        msg.setSender("<span style="color: #ff0000;">xxx</span>");
        msg.setTo(too);
        msg.setSubject(subject);
        msg.setHtmlBody(msgBody);
        service.send(msg);
        } catch (AddressException e) {
            // ...
        } catch (MessagingException e) {
            // ... 
        }
    }
}

As you can see it is quite straight forward. I’d like to mention though that in the above code you see a red xxx. This is where you put your sender address. It needs to either be the email to an admin (registered developer) of the app, or it has to be a user logged in using Google’s own login.

With the low-level api it throws an exception like the one below:

Uncaught exception from servlet org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.IllegalArgumentException: Unauthorized Sender: Unauthorized sender  

Good luck!