Ricezione di notifiche di mancato recapito

Per ricevere notifiche di mancato recapito delle email, devi configurare l'app in modo da attivare le notifiche di mancato recapito e gestire la notifica in entrata nell'app.

Configurazione dell'applicazione per le notifiche 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 notifiche di mancato recapito in arrivo, devi modificare i file di configurazione dell'applicazione appengine-web.xml e web.xml.

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 del rimbalzo, come indicato di seguito:

<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, che utilizzi per analizzare le notifiche di mancato recapito in arrivo, 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) {
    // ...
    }
  }
}