我最近尝试使用新的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分钟运行程序,则会收到所有邮件。
我不知道为什么会这样。
任何帮助都会非常感激。 :)
答案 0 :(得分:1)
要在评论部分详细介绍@ ken-y-n的回复,GMail API已usage limits。特别是对于这个产品,每日使用约为
您在测试期间可能遇到rateLimitExceeded
错误。
由于您通过循环发送电子邮件,因此在调用send
时会花费大约100个单位(加上其他费用,具体取决于您调用的方法)。这就是为什么有些电子邮件似乎被删除的原因。您可以通过对无法发送的消息实施指数退避来解决此问题。
另一种替代方法,而不是通过循环运行,是使用Batch requests将API调用组合在一起,以减少应用程序所做的HTTP连接数。