2010-01-07 2 views
1

J'ai un code moteur google app qui essaie d'envoyer un mail avec une pièce jointe de taille 379KB. Le courrier a deux destinataires - un sur la liste "À" et moi-même sur la liste "BCC". Apparemment, GAE traite cela comme 2 mails différents ce qui en fait une tentative d'envoi de mails avec une taille de pièce jointe 758KB (379 * 2) et entraîne QuotaExceededException car il dépasse le quota par minute de 500 Ko/min. Pendant que le courrier atteint le destinataire sur la liste "À", celui sur le Bcc (moi-même) ne reçoit pas le courrier.google app engine - la file d'attente de tâches est-elle une solution pour QuotaExceededException?

Le service de file d'attente de tâches peut-il être envisagé pour résoudre ce problème? le framework de file d'attente de tâches réessayera-t-il la transmission du courrier aux destinataires qui n'ont pas reçu le courrier chaque fois que QuotaExceededException se produit? En outre, je prévois d'étendre le code susmentionné de telle sorte qu'il enverrait le même courrier (avec pièce jointe) à plusieurs utilisateurs. Cela entraînerait inévitablement QuotaExceededException si la transmission à tous les destinataires est tentée sans intervalle de temps. Le service de file d'attente Can Task peut-il m'aider dans ce cas?

Répondre

2

Presque. La file d'attente de tâches réessayera une action jusqu'à ce qu'elle réussisse, mais elle réessaiera toute la tâche. AFAIK il ne sait pas ou ne se rappelle rien du succès partiel. Donc, si vous faites simplement votre action actuelle (envoi à deux destinataires) en tant que tâche, je soupçonne que le destinataire recevra de mauvaises choses dans le champ À, car la tâche continue de leur envoyer un courriel mais échoue globalement, une fois par minute, pour toujours ...

Donc, vous voudrez utiliser deux tâches (dans la même file d'attente): une tâche pour chaque destinataire.

+0

merci steve..shall essayer ce – Aadith

+0

Je suis d'accord avec Steve. Chaque tâche de la file d'attente de tâches peut uniquement être envoyée à un destinataire. Sinon, vous aurez le même problème que vous avez maintenant mais pire. –

5

Je pense que Task Queues couvrirait bien ce cas d'utilisation. En fait, l'exemple que Google utilise dans son documentation of Task Queues est celui dans lequel les e-mails sont envoyés à travers eux.

Deux choses à penser:

  1. liste Google Task Queues comme une fonctionnalité expérimentale qui peut être sous réserve de modifications dans les prochaines versions, donc si vous utilisez ce pour le code de production, préparez-vous pour le comportement de votre application à change soudainement et sans avertissement.
  2. Vous devrez configurer votre file d'attente de manière à ce qu'elle ne traite pas les e-mails plus rapidement qu'ils ne peuvent être envoyés sans que les codes ne violent vos quotas. Consultez la section Concepts de file d'attente de la documentation dans la section .

Enfin, avez-vous envisagé d'héberger cette pièce jointe volumineuse en tant qu'URL et que l'e-mail contienne un lien vers celle-ci? Cela rendrait l'envoi des emails beaucoup plus facile, et ce serait plus agréable pour votre consommation globale de bande passante, car seuls les destinataires qui le voulaient vraiment l'obtiendraient.

+0

merci adam oui .. j'ai envisagé de mettre un lien .. ce n'est pas une option que je peux poursuivre dans ce cas particulier – Aadith

+0

Adam, une autre question rapide..pour envoyer plusieurs mails successivement sans faire face à QuotaException, serait-ce un bonne idée de faire un Thread.currentThread(). sleep (1 min) après chaque transmission de courrier? – Aadith

+0

En outre, vous ne pouvez utiliser aucune fonction de thread dans AppEngine; ils ne sont pas autorisés. En outre, vous vous heurteriez à la limite de 30 secondes par requête. La façon correcte de le gérer est de configurer la file d'attente des tâches pour traiter uniquement une requête une fois par minute. Vous pouvez en savoir plus sur la configuration des files d'attente de tâches ici: http://code.google.com/appengine/docs/python/config/queue.html –

Questions connexes