2016-10-11 127 views
1

我最近在新的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) 

的设置()函数如下:

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

我可以想象API正在应用某种软限速,所以我建议的是比较调用send_message()时给出的'response'和''response''以便稍后调用' get_message()',并查看响应在立即发送,延迟和丢弃邮件之间的差异。 –

+0

对不起,我应该提到。我正在使用浏览器直接检查收到的邮件。所以我只使用send_message()。我发送的每个查询的响应如下: '已发信息:{u'labelIds':[u'SENT'],u'id':u'157bc​​e1438e5db28',u'threadId': u'157bc​​e1438e5db28'}' –

+0

因此,您的响应没有错误,它会返回[Users.messages资源](https://developers.google.com/gmail/api/v1/reference/users/messages#resource )为循环中的所有项目,但只有一些收件人收到?另外,你的意思是“丢弃” - 发送失败? – adjuremods

回答

1

要详细解释@ ken-y-n在评论部分的回复,GMail API有usage limits。专门为这款产品,每日使用约

  • 1亿美元的配额单位/天
  • 250配额单位/用户/秒

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

由于您通过循环发送电子邮件,因此在拨打send(根据所调用的方法加上其他费用)时,您将花费大约100个单位。这就是为什么一些电子邮件似乎被丢弃的原因。您可以通过对发送失败的消息实施指数退避来抵消这一点。

另一种替代通过循环运行的替代方法是使用Batch requests,它们将API调用分组在一起,以减少应用程序创建的HTTP连接数量。

+0

谢谢!我将研究配额限制。但是,我仍想确认使用SENDER_EMAIL_ID的浏览器在发送的文件夹中查看所有这些突发电子邮件是否正常。另外,就像我刚才提到的那样,我没有收到任何不同的邮件回复。我对所有发送的查询的响应如下: '发送的消息:{u'labelIds':[u'SENT'],u'id':u'157bc​​e1438e5db28',u'threadId':u'157bc​​e1438e5db28'} ' –

相关问题