标签: gmail-api

使用Gmail API和Google API节点客户端出现错误500 backendError

我正在尝试将新的Gmail APIGoogle API节点客户端配合使用.我从开发人员控制台创建了一个新项目,设置了一个新的"服务帐户"客户端ID,并启用了对API的访问.

作为概念证明,我只是想在我的收件箱中列出线程.当我为API资源管理器启用OAuth 2.0切换并输入我的电子邮件地址时,请求成功,我看到带有数据的JSON响应.

现在我尝试在Node中做同样的事情:

var googleapis = require('googleapis');

var SERVICE_ACCOUNT_EMAIL = '...SNIP...';

// generated by: openssl pkcs12 -in ...SNIP...p12 -out key.pem -nocerts -nodes
var SERVICE_ACCOUNT_KEY_FILE = 'key.pem';
var jwt = new googleapis.auth.JWT(
        SERVICE_ACCOUNT_EMAIL,
        SERVICE_ACCOUNT_KEY_FILE,
        null,
        ['https://www.googleapis.com/auth/gmail.readonly']);

googleapis
    .discover('gmail', 'v1')
    .execute(function(err, client) {

        jwt.authorize(function(err, result) {
            if(err) console.error(err);
            else console.log(result);

            client.gmail.users.threads.list()
                .withAuthClient(jwt)
                .execute(function(err, result) {
                    if(err) console.error(err);
                    else console.log(result);
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

首先,我打印authorize()调用的结果,看起来它返回一个令牌,所以我想我已经正确设置了所有OAuth的东西:

{ access_token: '...SNIP...',
  token_type: 'Bearer',
  expires_in: 1404277946,
  refresh_token: …
Run Code Online (Sandbox Code Playgroud)

google-api-nodejs-client gmail-api

6
推荐指数
1
解决办法
2949
查看次数

如何快速计算用户邮箱中的邮件数?

我正在尝试使用Gmail API计算用户邮箱中的所有电子邮件.这意味着运行类似的东西

do{
    page = request.execute();
    if (page.getMessages() != null){
        totalSize += page.getMessages().size();
    }
    request.setPageToken(page.getNextPageToken());
}while (request.getPageToken() != null && request.getPageToken().length() > 0);
Run Code Online (Sandbox Code Playgroud)

问题是对于大型邮箱,这可能是一个漫长的过程,需要许多API调用.例如,一个包含31,000封电子邮件的邮箱运行时间超过一分钟,并且需要300多次迭代才能运行.

有没有更好的办法?

我尝试过使用maxResults参数,但默认为100并忽略任何> 100的值.批处理不起作用,因为在您已遍历每个页面之前,无法知道必须进行多少次请求.resultSizeEstimate列表响应中的属性是荒谬的不准确.

gmail-api

6
推荐指数
1
解决办法
4870
查看次数

使用Gmail新API发送带附件的邮件,但不会显示给收件人的收件箱

我们正在使用他们提供的最新API集成GMail,作为在我们的应用程序中开发电子邮件客户端的一部分.我们正在使用Google提供的PHP客户端库.

请参阅链接https://developers.google.com/api-client-library/php/

在这里我试图发送带附件的邮件.这里我们生成了message/rfc822兼容文本,并使用'raw'参数传递它.这里我发现的问题是,在执行代码后,当我检查发送的邮件是否通过GMail API发送的邮件时,附件显示正确.但是没有收到/显示发件人的邮箱.

有关详细信息,请参阅代码:

require_once DOCUMENT_ROOT . '/../library/google/src/Google/Client.php';
require_once DOCUMENT_ROOT . '/../library/google/src/Google/Service/Gmail.php';

function encodeRecipients($recipient){
    $recipientsCharset = 'utf-8';
    if (preg_match("/(.*)<(.*)>/", $recipient, $regs)) {
        $recipient = '=?' . $recipientsCharset . '?B?'.base64_encode($regs[1]).'?= <'.$regs[2].'>';
    }
    return $recipient;
}

$isAccessCodeExpired = 0;
$arrAccessToken = array();
$session = new Zend_Session_Namespace();

$client = new Google_Client();
$client->setClientId($this->client_id);
$client->setClientSecret($this->client_secret);
$client->setRedirectUri($this->redirect_uri);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');

$client->addScope("https://mail.google.com/");
$client->addScope("https://www.googleapis.com/auth/gmail.compose");
$client->addScope("https://www.googleapis.com/auth/gmail.modify");
$client->addScope("https://www.googleapis.com/auth/gmail.readonly");


if ($this->getRequest()->getParam('code')) {
    $code = $this->getRequest()->getParam('code');
    $client->authenticate($code);
    $session->gmail_access_token = $client->getAccessToken();
    //$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    $redirect = BASE_PATH . …
Run Code Online (Sandbox Code Playgroud)

php email gmail attachment gmail-api

6
推荐指数
1
解决办法
3238
查看次数

从谷歌开发者网站下载后,client_secret.json为空

我想从谷歌API下载client_secret.json.我按照https://developers.google.com/gmail/api/quickstart/ruby中列出的步骤操作.

  • 使用此向导可在Google Developers Console中创建或选择项目,并自动启用API.
  • 在左侧边栏中,选择同意屏幕.选择电子邮件地址并输入产品名称(如果尚未设置),然后单击"保存"按钮.
  • 在左侧的边栏中,选择"凭据",然后单击"创建新客户端ID".
  • 选择应用程序类型Installed application,安装的应用程序类型Other,然后单击Create Client ID按钮.
  • 单击新客户端ID下的"下载JSON"按钮.将此文件移动到您的工作目录并将其重命名为client_secret.json.

client_secret.json文件确实下载但它是空的.该文件的标题看起来必须是以apps.googleusercontent.com结尾的client_id,但文件中没有存储数据.

ruby json gmail-api

6
推荐指数
1
解决办法
1452
查看次数

MIME标头无法通过Gmail API实现

我正在尝试通过Gmail API自动创建草稿,我希望这些草稿能够回复现有的电子邮件.为此,我认为我需要设置"threadId"标题(特定于Gmail),"引用"标题和"In-Reply-To"标题.此外,要让Gmail将邮件视为回复,"主题"标题​​必须与原始电子邮件匹配.

我将所有这些标头硬编码到MIMEText对象中,然后将消息作为字符串进行base-64编码(urlsafe)并让Gmail API提供它.但是,"threadId","In-Reply-To"和"References"标题似乎没有在发送的电子邮件中显示,因为单击"显示原始"时显示的MIME中不存在它们在Gmail用户界面中.

new = MIMEText("reply body text")
new["In-Reply-To"] = "[Message-ID of email to reply to]" #looks like <..@mail.gmail.com>
new["References"] = "[Message-ID of email to reply to]" #looks like <..@mail.gmail.com>
new["threadId"] = "[threadId of message to reply to]" #looks like 14ec476abbce3421
new["Subject"] = "Testsend2"
new["To"] = "[Email to send to]"
new["From"] = "[Email to send from]"

messageToDraft = {'raw': base64.urlsafe_b64encode(new.as_string())}
message = {'message': messageToDraft}
draft = service.users().drafts().create(userId="me", body=message).execute()
Run Code Online (Sandbox Code Playgroud)

python mime gmail-api

6
推荐指数
1
解决办法
1318
查看次数

使用相同控制台应用的Gmail REST API和Gmail IMAP的API配额

Gmail IMAP也会转移到Oauth2身份验证.因此,我们正在为Gmail REST API和Gmail IMAP 使用相同的控制台应用.
我的问题:对于IMAP和REST API,分配的配额是共享的还是每个都有自己的配额?如果是这样,任何人都可以共享Gmail IMAP的配额.

imap google-api gmail-imap gmail-api google-console-developer

6
推荐指数
1
解决办法
224
查看次数

在python中使用google api添加多个收件人?

我一直在使用gmail api的指南来创建草稿.以下代码运行良好.

def create_message(sender, to, subject, message_text):

  message = MIMEText(message_text)
  message['to'] = to
  message['from'] = sender
  message['subject'] = subject
  return {'raw': base64.urlsafe_b64encode(message.as_string())}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何添加多个收件人?API指南似乎没有提到任何类型.

python gmail-api

6
推荐指数
1
解决办法
1142
查看次数

Gmail停止发送推送通知

我已经按照本指南配置了推送通知,并且在调用watch终结点时,我会获得约一周的到期时间。

在此期间,我希望收到已配置的发布/订阅主题的通知,而无需watch在到期日期前的某个时间调用终结点。

但是,发生的事情是,大约一天后,我不再收到通知,并且呼叫watch端点也无济于事。

为什么GMail已停止向订阅端点发送通知?

gmail-api

6
推荐指数
1
解决办法
448
查看次数

Gmail登录集成到Android应用程序中,profilePhoto始终为null?

我们已将Gmail登录集成到我们的Android应用程序中,我们正在使用服务器端集成来获取一次auth_code,如下所述:https://developers.google.com/identity/sign-in/android/offline-access

我们在服务器端以及应用程序内的Android设备上都可以访问Gmail帐户.

但不知何故,我们没有使用以下方法获取个人资料照片:

googleSignInAccount.getPhotoUrl();
Run Code Online (Sandbox Code Playgroud)

在提出请求时,我们使用以下代码:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestScopes(new Scope(GmailScopes.GMAIL_READONLY))
                        .requestServerAuthCode("OUR_SERVER_CLIET_ID", true)
                        .requestEmail()
                        .requestProfile()
                        .build();
Run Code Online (Sandbox Code Playgroud)

有关stackoverflow的一些问题表明,如果用户启用了Google+个人资料帐户,那么只有您才能获得照片网址.这种情况在我们的案例中没有发生,因为我们使用在Google+帐户上有照片的帐户进行了测试.

我们在iOS应用程序中进行了类似的集成,我们可以在其中获取个人资料照片网址?可能有什么问题?

更新:

只有在个人资料中设置了照片集的用户才能获得照片网址,否则为空.

android google-plus gmail-api

6
推荐指数
1
解决办法
322
查看次数

请复制代码,切换到应用程序并将其粘贴到那里但在哪里?

我正在使用oAuth2.0从我的Gmail帐户中读取电子邮件.这是我的代码

 oauthswift = OAuth2Swift(
            consumerKey:    "242468529977-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
            consumerSecret: "GfGVl_xxxxxxxxxxmjnAX",
            authorizeUrl:   "https://accounts.google.com/o/oauth2/auth",
            accessTokenUrl: "https://accounts.google.com/o/oauth2/token",
            responseType:   "code"
        )


        oauthswift?.allowMissingStateCheck = true

        let _ = oauthswift?.authorize(
            withCallbackURL: URL(string: "urn:ietf:wg:oauth:2.0:oob")!, scope: "https://www.googleapis.com/auth/gmail.metadata", state: "",
        success: { credential, response, parameters in
            let parameters =  Dictionary<String, AnyObject>()
            // Multi-part upload
            print(credential)
            print(response)


        },
        failure: { error in
            print("ERROR: \(error.localizedDescription)")
        }
        )
Run Code Online (Sandbox Code Playgroud)

但在我允许后,它会向我显示此屏幕

在此输入图像描述

并说'请复制此代码并切换到应用程序并将其粘贴到那里.' 但我不知道在哪里粘贴代码.

email-attachments ios oauth-2.0 swift gmail-api

6
推荐指数
1
解决办法
665
查看次数