Ricezione di notifiche di mancato recapito

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

Configurazione dell'applicazione per la notifica di ritorno email

Per impostazione predefinita, le applicazioni non ricevono notifiche di mancato recapito per email che non è stato possibile recapitare. Per attivare il servizio di notifica dei bounce 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 bounce 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 abbandono /_ah/bounce al servlet di gestione degli abbandoni, 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, che viene utilizzata per analizzare le notifiche di ritorno non andato a buon fine 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) {
    // ...
    }
  }
}