【问题标题】:Gmail API sends email but some are never being receivedGmail API 发送电子邮件,但有些从未收到
【发布时间】:2016-10-12 17:01:08
【问题描述】:

我最近尝试了新的 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 分钟运行程序,那么所有邮件都会收到。

我不知道这是为什么。

任何帮助将不胜感激。 :)

【问题讨论】:

  • 我可以想象 API 正在应用某种软速率限制,所以我建议将调用 send_message() 时给出的 response 与稍后的 response 进行比较拨打get_message(),并查看立即发送、延迟和丢弃电子邮件之间的响应有何不同。
  • 很抱歉我应该提到。我正在使用浏览器直接检查收到的邮件。所以我只是使用 send_message()。此外,我对发送的每个查询的响应如下:Sent Message: {u'labelIds': [u'SENT'], u'id': u'157bce1438e5db28', u'threadId': u'157bce1438e5db28'}
  • 所以,您的回复没有错误,它为循环中的所有项目返回Users.messages resource,但收件人只收到了一些?另外,“丢弃”是什么意思 - 发送失败?
  • 我会检查 User.messages.resource。但是我所说的“丢弃”是指在当前运行代码的终端和使用浏览器发送的SENDER_EMAIL_ID的邮箱中发送操作成功。但是,使用浏览器访问的 RECEIVER_EMAIL_ID 的收件箱不会反映这些电子邮件。

标签: python-2.7 gmail-api


【解决方案1】:

为了在 cmets 部分详细说明 @ken-y-n 的响应,GMail API 有 usage limits。专门针对这款产品,日常使用量约为

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

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

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

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

【讨论】:

  • 谢谢!我将研究配额限制。但是,我仍然想确认使用 SENDER_EMAIL_ID 的浏览器在已发送文件夹中看到所有这些突发电子邮件是否正常。此外,就像我提到的那样,我没有收到任何不同的电子邮件被丢弃的回复。我对发送的所有查询的回复如下:Sent Message: {u'labelIds': [u'SENT'], u'id': u'157bce1438e5db28', u'threadId': u'157bce1438e5db28'}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2014-06-16
相关资源
最近更新 更多