Cómo recibir notificaciones de rebote

Si deseas recibir notificaciones de rebote de correo electrónico, debes configurar tu app para habilitar las notificaciones de rebote y administrar las notificaciones entrantes en la app.

Configura tu aplicación para las notificaciones de rebote de correo electrónico

Según la configuración predeterminada, las aplicaciones no reciben notificaciones de rebote de correos electrónicos que no pudieron entregarse. Para habilitar el servicio de notificación de rebote entrante, debes modificar los archivos de configuración appengine-web.xml y web.xml de la aplicación.

Para modificar appengine-web.xml, agrega la sección inbound-services a fin de habilitar el servicio de rebote entrante:

<inbound-services>
  <!-- Used to handle incoming mail. -->
  <service>mail</service>
  <!-- Used to handle bounced mail notifications. -->
  <service>mail_bounce</service>
</inbound-services>

Para modificar web.xml, mapea la URL de rebote /_ah/bounce al servlet de control de rebote de la siguiente manera:

<servlet>
  <servlet-name>bouncehandler</servlet-name>
  <servlet-class>com.example.appengine.mail.BounceHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>bouncehandler</servlet-name>
  <url-pattern>/_ah/bounce</url-pattern>
</servlet-mapping>
<security-constraint>
  <web-resource-collection>
    <web-resource-name>bounce</web-resource-name>
    <url-pattern>/_ah/bounce</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

Maneja las notificaciones de rebote

La API de JavaMail incluye la clase BounceNotificationParser, que usas para analizar notificaciones de rebote entrantes, como se muestra aquí:

import com.google.appengine.api.mail.BounceNotification;
import com.google.appengine.api.mail.BounceNotificationParser;

import java.io.IOException;
import java.util.logging.Logger;
import javax.mail.MessagingException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BounceHandlerServlet extends HttpServlet {

  private static final Logger log = Logger.getLogger(BounceHandlerServlet.class.getName());

  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    try {
      BounceNotification bounce = BounceNotificationParser.parse(req);
      log.warning("Bounced email notification.");
      // The following data is available in a BounceNotification object
      // bounce.getOriginal().getFrom() 
      // bounce.getOriginal().getTo() 
      // bounce.getOriginal().getSubject() 
      // bounce.getOriginal().getText() 
      // bounce.getNotification().getFrom() 
      // bounce.getNotification().getTo() 
      // bounce.getNotification().getSubject() 
      // bounce.getNotification().getText() 
      // ...
    } catch (MessagingException e) {
    // ...
    }
  }
}