我有一个谷歌应用引擎代码,试图发送一个大小为379KB的附件的邮件。邮件有两个收件人 - 一个在“收件人”列表中,另一个在“BCC”列表中。显然,GAE将此视为两个不同的邮件,这使得它尝试发送附件大小为758KB(379 * 2)的邮件,并导致QuotaExceededException,因为它超过每分钟500奇卡KB /分钟的配额。当邮件到达“收件人”列表中的收件人时,密件抄送(我自己)上的邮件没有收到邮件。
是否可以考虑任务队列服务来解决此问题?每当QuotaExceededException发生时,任务队列框架是否会重试将邮件传输给没有收到邮件的收件人?
此外,我计划扩展上述代码,以便将相同的邮件(带附件)发送给多个用户。如果在没有任何时间间隔的情况下尝试传输到所有收件人,这将导致QuotaExceededException的结果显而易见。在这种情况下,任务队列服务能否以任何方式帮助我?
答案 0 :(得分:5)
我认为任务队列可以很好地涵盖这个用例。事实上,Google在其documentation of Task Queues中使用的示例是通过它们发送电子邮件的示例。
要考虑两件事:
最后,您是否考虑将此大型附件作为URL托管,并且电子邮件中包含指向该附件的链接?这使得发送电子邮件变得更加容易,并且它对您的整体带宽消耗更加友好,因为只有真正想要它的收件人才能获得它。
答案 1 :(得分:2)
几乎。任务队列将重试操作,直到成功为止,但它将重试整个任务。 AFAIK它不知道或记住部分成功的任何事情。因此,如果你只是将当前的操作(发送给两个收件人)作为一项任务,我怀疑收件人在收件人:字段中会发生不好的事情,因为任务一直向他们发送电子邮件但是整体失败,每分钟一次,永远...
因此,您需要使用两个任务(在同一个队列中):每个收件人一个任务。