Ricezione di notifiche di mancato recapito

Per ricevere notifiche di mancato recapito delle email, devi configurare la tua app per attivare le notifiche email e devi creare un gestore per gestire queste notifiche.

Configurazione dell'app per ricevere notifiche di mancato recapito

La configurazione è composta da due parti. Innanzitutto, devi attivare le notifiche. In secondo luogo, devi impostare la mappatura tra /_ah/bounce e il tuo gestore dei bounce, in modo che App Engine sappia dove inviare i dati di notifica. Per configurare l'app in modo da ricevere notifiche relative alle email restituite:

  1. Aggiungi quanto segue al tuo file app.yaml per attivare la notifica:
    inbound_services:
    - mail_bounce
  2. In app.yaml, dichiara anche una mappatura tra /_ah/bounce e il gestore delle notifiche di mancato recapito nel codice, ad esempio:
    - url: /_ah/bounce
      script: handle_bounced_email.app
      login: admin

Gestire le notifiche di mancato recapito

Una notifica di mancato recapito è un messaggio automatico di un sistema di posta elettronica che segnala un problema con la consegna del messaggio. Nella tua app, dovrai creare un codice di gestione dei rimbalzi per ricevere ed elaborare queste notifiche.

Un modo per scrivere un gestore di rimbalzi è utilizzare la classe di utilità BounceNotificationHandler. Se scegli questa strada, devi eseguire l'override del metodo receive(), che viene chiamato con un argomento della classe BounceNotification. Indipendentemente dal fatto che utilizzi o meno la classe di convenienza BounceNotificationHandler, devi utilizzare BounceNotification per analizzare le notifiche di mancato recapito.

Sia BounceNotificationHandler che BounceNotification sono inclusi nel pacchetto google.appengine.ext.webapp.mail_handlers.

Ecco un gestore dei mancati recapiti di esempio che utilizza la classe di convenienza BounceNotificationHandler:

class LogBounceHandler(BounceNotificationHandler):
    def receive(self, bounce_message):
        logging.info('Received bounce post ... [%s]', self.request)
        logging.info('Bounce original: %s', bounce_message.original)
        logging.info('Bounce notification: %s', bounce_message.notification)