Ricezione di notifiche di mancato recapito

Per ricevere notifiche di mancato recapito via email, devi configurare l'app in modo da abilitare le notifiche di mancato recapito e devi gestire le notifiche in arrivo nell'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 attivare il servizio di notifica di mancato recapito in arrivo, devi modificare i file di configurazione appengine-web.xml e web.xml dell'applicazione.

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

<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 per la gestione del rimbalzo 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>

Gestione delle notifiche di mancato recapito

L'API JavaMail include la classe BounceNotificationParser, utilizzata per analizzare le notifiche di mancato recapito in arrivo, come mostrato di seguito:

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