Like Tim says... if you're really worried about sending out a duplicate e-mail from time to time... then you'll need to design your mailer task to do something like this:
1. Mailer task starts.. gets a batch of work from some datastore Model that serves as your queue. 2. Process a row of work, and after you successfully send out an e-mail for that row delete the row from your queue. Then just do step 2 over and over until you finish all of your work.. or if some error forces the task to retry.. then it should get a new batch of work from your queue.. which should now contain only entities that have not been processed. The only case where you'd get a duplicate email sent for a row of work would be if the email successfully was sent out.. but an error occurred when trying to remove the row from your queue. And, even in that case, you could add try: except: blocks to do everything possible to avoid that (just retry the db.delete() from your queue, etc). (Then, only the 30 second limit would be a concern.. but you can handle that as well). Then again, you really have to be adamant about avoiding the potential duplicate e-mail issue to do this sort of thing. On Wed, Mar 17, 2010 at 8:53 PM, Tim Hoffman <[email protected]> wrote: > Well could yo record if you sent any particular email, and > not resend it ? > > On Mar 18, 6:05 am, prgmratlarge <[email protected]> wrote: > > "When implementing the code for Tasks (as worker URLs within your > > app), it is important that you consider whether the task is > > idempotent. App Engine's Task Queue API is designed to only invoke a > > given task once, however it is possible in exceptional circumstances > > that a Task may execute multiple times (e.g. in the unlikely case of > > major system failure). Thus, your code must ensure that there are no > > harmful side-effects of repeated execution." -http://code.google.com/ > > appengine/docs/python/taskqueue/overview.html > > > > According to this part of the documentation, it would seem that > > setting up an email-sending task-queue is impossible. After all, > > sending someone the same email thousands of times would be disastrous. > > Yet the documentation also gives email sending as an example use of > > the Task Queue. > > > > This seems to be contradictory. How can I create a Task Queue for > > sending email without running into problems of idempotence? > > > > Thanks for your help. > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<google-appengine%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
