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 mancato recapito delle email

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

Modifica appengine-web.xml aggiungendo una sezione inbound-services per attivare 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 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 rimbalzo

L'API JavaMail include BounceNotificationParser, che utilizzi per analizzare le notifiche di mancato recapito in arrivo, come illustrato 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) {
    // ...
    }
  }
}