Gmail API会发送电子邮件,但有些邮件从未收到过

时间:2016-10-11 02:27:51

标签: python-2.7 gmail-api

我最近尝试使用新的Gmail API。除了一件事,一切似乎都很好。我的问题如下:

我正在制作一个接待员项目,可能需要在繁忙时间不到一分钟内生成多封电子邮件。因此,出于测试目的,我运行以下代码,该代码工作正常:

if __name__ == '__main__':
  service = setup()      //Simply an helper function to do the basic credential check. Works fine!
  print('service:'+str(service))

  for counter in range(1, 10):
    print('Sending message '+ str(counter))
    message = create_message(<SENDER_EMAIL_ID>,<RECEIVER_EMAIL_ID>, "Email Number: "+ str(counter) , "Sample text")
    response = send_message(service, 'me' , message)
    print(response)

setup()函数如下:

credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)

现在,当我在不到一分钟的时间内连续三次运行代码时,代码运行正常,我可以使用Web浏览器查看SENDER_EMAIL_ID的已发送文件夹中的所有27封电子邮件。因此,无论何时发出请求,Gmail API都会发送所有邮件。但是,只有部分电子邮件在RECEIVER_EMAIL_ID处收到,其余部分正在被删除。

但是,如果我按照延迟2-5分钟运行程序,则会收到所有邮件。

我不知道为什么会这样。

任何帮助都会非常感激。 :)

1 个答案:

答案 0 :(得分:1)

要在评论部分详细介绍@ ken-y-n的回复,GMail API已usage limits。特别是对于这个产品,每日使用约为

  • 10亿个配额单位/天
  • 250个配额单位/用户/秒

您在测试期间可能遇到rateLimitExceeded错误。

由于您通过循环发送电子邮件,因此在调用send时会花费大约100个单位(加上其他费用,具体取决于您调用的方法)。这就是为什么有些电子邮件似乎被删除的原因。您可以通过对无法发送的消息实施指数退避来解决此问题。

另一种替代方法,而不是通过循环运行,是使用Batch requests将API调用组合在一起,以减少应用程序所做的HTTP连接数。