据我所知,目前google的API每秒向其API提供10个请求(来自他们的文档),并且看起来远远不足以让您轻松使用邮件.我需要获取所有电子邮件的标题(或至少发件人和收件人).有没有什么比等待numberOfMails / 10秒更好的了?
我目前正在访问API从客户端的JavaScript应用程序,我想发布API调用超过了一些设备/应用程序相同的用户,但目前还不清楚,如果他们的限制适用于Gmail的用户或注册申请.
无论如何,希望得到一些想法如何处理它,目前的配额是完全无法使用的.
作为messages.get()返回的有效负载的一部分,我得到以下内容
"parts": [
{
"body": {
"data": "Q29udHJWxpZWYsIExvcmVtIElwc3VtIGlz......much longer",
Run Code Online (Sandbox Code Playgroud)
怎么读实际的消息?基本上,我如何解密/解码这些信息,以便它是真正的英文文本?
我正在使用Gmail API的Python库.
我觉得我错过了一些愚蠢的事......
我正在使用PHP SDK为新的Gmail API提取电子邮件中的附件.我可以获得附件内容,但除非它是文本文件,否则我无法在保存文件后打开它.如果附件是PDF,则不会呈现.如果是excel文件,则无法打开.
我究竟做错了什么?
// this works; I get the attachment body, etc
$data = $g->gmail->users_messages_attachments->get($email_account, $email_message_id, $p->getBody()->getAttachmentId());
$fh = fopen(DOC_ROOT."/file.pdf", "w+");
fwrite($fh, base64_decode($data->data));
fclose($fh);
Run Code Online (Sandbox Code Playgroud) 我一直在尝试找出如何将收件人自动添加到通过其Ruby库使用Gmail API创建的草稿电子邮件中。我可以毫无问题地创建草稿,但设置收件人会给我造成麻烦,而且我还找不到任何显示添加电子邮件特定内容的最佳方法的良好示例。
使用Google API操场并拉入已经创建的草稿,看起来结构应类似于下面所示,但是一旦创建草稿,便没有收件人。
@result = client.execute(
:api_method => gmail.users.drafts.create,
:parameters => {
'userId' => "me"
},
:body_object => {
'message' => {
'raw' => Base64.urlsafe_encode64('Test Email Message'),
'payload' => {
'headers' =>
[
{
'name' => "To",
'value' => "John Smith <john_smith.fake@gmail.com>"
}
]
}
}
}
)
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序可以通过此处列出的工作流程从Chrome扩展程序访问Google API.
工作流的基础是初始化OAuth流
var oauth = ChromeExOAuth.initBackgroundPage({
'request_url': 'https://www.google.com/accounts/OAuthGetRequestToken',
'authorize_url': 'https://www.google.com/accounts/OAuthAuthorizeToken',
'access_url': 'https://www.google.com/accounts/OAuthGetAccessToken',
'consumer_key': '{MY_CLIENT_ID}',
'consumer_secret': '{MY_CLIENT_SECRET}',
'scope': 'https://www.google.com/m8/feeds/ https://apps-apis.google.com/a/feeds/emailsettings/2.0/ https://mail.google.com/',
'app_name': 'Gmail Plugin',
'callback_page': 'src/google-oauth/chrome_ex_oauth.html'
});
Run Code Online (Sandbox Code Playgroud)
安装扩展程序后,用户将进入对话框页面进行身份验证并同意我要求的范围.从这里我推断我的消费者密钥和秘密是好的.我已允许在Google Developers控制台中访问GMail,Contacts和Admin SDK.
在此之前,我曾要求使用Contacts API和Admin SDK API.我现在正在尝试添加一些使用Gmail REST API的功能.
设置请求的下一步是从后台页面发出请求.
function getSentEmails() {
var emailCollection;
var url = "https://www.googleapis.com/gmail/v1/users/me/messages";
var request = {
'method': 'GET',
'parameters': {
'labelIds': 'SENT'
}
};
var callback = function(response, xhr) {
emailCollection = JSON.parse(response);
console.dir(emailCollection);
}
oauth.sendSignedRequest(url, callback, request);
};
Run Code Online (Sandbox Code Playgroud)
签名请求的工作方式是调用方法来完成OAuth舞的下一步,
oauth.authorize(function() {
getSentEmails();
});
Run Code Online (Sandbox Code Playgroud)
这导致每次403禁止.我似乎没有问题访问我提到的其他API虽然这个OAuth流程.我已经在manifest.json中允许了范围 …
试图只检索发送给我的邮件(而不是我的外发邮件),在这种情况下,我发送了一封电子邮件,并且已经回复了.当我使用以下请求时,我得到的线程只包含所需的传入消息:
"https://www.googleapis.com/gmail/v1/users/me/threads?q=-from%3Ame+in%3Ainbox&access_token=" + thisToken
Run Code Online (Sandbox Code Playgroud)
但是,当我从返回中获取消息ID并将其插入单个消息请求时:
"https://www.googleapis.com/gmail/v1/users/me/messages/" + messageId + "?access_token=" + thisToken
Run Code Online (Sandbox Code Playgroud)
返回的消息是线程中的第一条消息,在这种情况下是我的外发消息.我已经在API Explorer中演示了这一点.是否可以获取仅传入消息的消息ID?Thread API Explorer能够对其进行排序这一事实让我相信它有可能......
(我是新手.真心感谢任何帮助,我很感激你的时间.)


我正在使用适用于PHP的Google API客户端库与Gmail API一起下载和处理一些电子邮件.
我收到消息没有任何问题:
$optParamsGet = [];
$optParamsGet['format'] = 'full'; // Display message in payload
$message = $service->users_messages->get('me',$id,$optParamsGet);
$messagePayload = $message->getPayload();
Run Code Online (Sandbox Code Playgroud)
然后我处理getParts()数组并转到第一个附件,这是一个没有名称的.eml文件
[modelData:protected] => Array
(
[headers] => Array
(
[0] => Array
(
[name] => Content-Type
[value] => message/rfc822
)
[1] => Array
(
[name] => Content-Disposition
[value] => attachment; creation-date="Fri, 24 Jul 2015 00:20:48 GMT"; modification-date="Fri, 24 Jul 2015 00:20:48 GMT"
)
)
[body] => Array
(
[attachmentId] => ANGjdJ_TfJlMTssCNackUcQfT...mpppKiT8sSg
[size] => 37099
)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何解码"attachmentId"字符串?我认为这是一个base64编码,但命令
echo base64_decode($parts[1]->body->attachmentId); …Run Code Online (Sandbox Code Playgroud) 我正在尝试从gmail API watch()提供的historyId获取历史记录
https://developers.google.com/gmail/api/v1/reference/users/history/list
我得到historyId如下响应
{
historyId: 12345
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加fields论点没有运气。
对https://www.googleapis.com/gmail/v1/users/me/history?startHistoryId=12345&fields=historyId的请求,history(id%2Cmessages)也失败
我做错什么了吗?
我正在尝试使用gmail api下载电子邮件附件,当我在浏览器中看到原始电子邮件时,下面是显示的内容
Content-Type: application/pdf; name="Report.pdf"
Content-Disposition: attachment; filename="Report.pdf"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ikot3mys0
JVBERi0xLjQKJf////8KMTMgMCBvYmoKPDwvTGVuZ3RoIDI0NzYKL1N1YnR5cGUgL1hNTAovVHlw
ZSAvTWV0YWRhdGEKPj4Kc3RyZWFtCjw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2Vo
aUh6cmVTek5UY3prYzlkJz8+Cjx4OnhtcG1ldGEgeDp4bXB0az0iMy4xLTcwMSIgeG1sbnM6eD0i
YWRvYmU6bnM6bWV0YS8iPgogIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91
dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICA8eG1w
OkNyZWF0ZURhdGU+MjAxNS0xMC0yN1QwNjozMTo1OFo8L3htcDpDcmVhdGVEYXRlPgogICAgICA8
eG1wOkNyZWF0b3JUb29sPk5pdHJvIFBybyA5ICAoOS4gMC4gNi4gMjApPC94bXA6Q3JlYXRvclRv
b2w+CiAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTEwLTI3VDA2OjMxOjU5WjwveG1wOk1vZGlm
eURhdGU+CiAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTUtMTAtMjdUMDY6MzE6NTlaPC94bXA6
TWV0YWRhdGFEYXRlPgogICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICA8cmRmOkRlc2NyaXB0aW9u
IHJkZjphYm91dD0iIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8i
PgogICAgICA8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0PgogICAgICA8ZGM6
Y3JlYXRvcj4KICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgIDxyZGY6bGk+PC9yZGY6bGk+CiAg
ICAgICAgPC9yZGY6U2VxPgogICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDxkYzp0aXRsZT4KICAg
ICAgICA8cmRmOkFsdD4KICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+PC9y
Run Code Online (Sandbox Code Playgroud)
但当我在curl https://www.googleapis.com/gmail/v1/users/sndata@celestica.com/messages/[mailid]/attachments/[attachmentid]下使用gmail api时,它返回
{
"size": 4596,
"data": "JVBERi0xLjQKJf____8KMTMgMCBvYmoKPDwvTGVuZ3RoIDI0NzYKL1N1YnR5cGUgL1hNTAovVHlwZSAvTWV0YWRhdGEKPj4Kc3RyZWFtCjw_eHBhY2tldCBiZWdpbj0n77u_JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8-Cjx4OnhtcG1ldGEgeDp4bXB0az0iMy4xLTcwMSIgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgogIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI-CiAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICA8eG1wOkNyZWF0ZURhdGU-MjAxNS0xMC0yN1QwNjozMTo1OFo8L3htcDpDcmVhdGVEYXRlPgogICAgICA8eG1wOkNyZWF0b3JUb29sPk5pdHJvIFBybyA5ICAoOS4gMC4gNi4gMjApPC94bXA6Q3JlYXRvclRvb2w-CiAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTEwLTI3VDA2OjMxOjU5WjwveG1wOk1vZGlmeURhdGU-CiAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTUtMTAtMjdUMDY6MzE6NTlaPC94bXA6TWV0YWRhdGFEYXRlPgogICAgPC9yZGY6RGVzY3JpcHRpb24-CiAgICA8cmRmOkRlc2NyaXB0 .....
Run Code Online (Sandbox Code Playgroud)
}
正如您在第一行中看到的,某些符号"////"已转换为"____",这导致文件被解码为损坏的格式.
这是gmail api中的错误吗?
谢谢
文森特
我想设置推送通知手表,但收到错误回复.我需要什么授权?
请求:
// Google API
$client = getClient();
// POST request
$ch = curl_init('https://www.googleapis.com/gmail/v1/users/me/watch');
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $client->getAccessToken()['access_token'],
'Content-Type: application/json'
),
CURLOPT_POSTFIELDS => json_encode(array(
'topicName' => 'projects/xxxx/topics/xxxx',
'labelIds' => ["INBOX"]
))
));
Run Code Online (Sandbox Code Playgroud)
响应:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
}
],
"code": 403,
"message": "Error sending test …Run Code Online (Sandbox Code Playgroud) gmail-api ×10
gmail ×5
php ×3
google-api ×2
javascript ×2
email ×1
gapi ×1
google-oauth ×1
python ×1
ruby ×1