Ricezione di notifiche di mancato recapito

Per ricevere le notifiche di mancato recapito delle email, devi configurare la tua app per attivare la notifica di mancato recapito e devi gestire la notifica in arrivo nella tua app.

Configurazione dell'applicazione per la notifica di mancato recapito delle email

Per impostazione predefinita, le applicazioni non ricevono notifiche di mancato recapito per le email che non è stato possibile recapitare. Per abilitare il servizio di notifica dei mancati recapiti in entrata, devi modificare i file di configurazione appengine-web.xml e web.xml dell'applicazione.

Modifica appengine-web.xmlaggiungendo una sezione inbound-services per attivare il servizio di rimbalzo in entrata:

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

Modifica web.xml mappando l'URL di rimbalzo /_ah/bounce al servlet di gestione dei rimbalzi, come segue:

<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>

Gestire le notifiche di mancato recapito

L'API JavaMail include la classe BounceNotificationParser, che utilizzi per analizzare le notifiche di mancato recapito in entrata, come mostrato qui:

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) {
    // ...
    }
  }
}