标签: gmail-api

未收到从 gmail api 发送的电子邮件,但显示在已发送文件夹中

我正在使用gapi 发送gmail。但是如果我将邮件发送给自己,它就不会出现在我的收件箱中。最奇怪的是,它出现在“已发送”文件夹中。`

function sendMessage(email, callback) {
    // Web-safe base64 
    var base64EncodedEmail = btoa(email).replace(/\//g,'_').replace(/\+/g,'-');
    var request = gapi.client.gmail.users.messages.send({
        'userId': 'me',
        'message': {
            'raw': base64EncodedEmail
        }
    });
    request.execute(callback);
}

function send() {
    var var to = 'znlswd@gmail.com',
        subject = 'Hello World',
        content = 'send a Gmail.'

    var email = "From: 'me'\r\n"+
        "To:  "+ to +"\r\n"+
        "Subject: "+subject+"\r\n"+
        "\r\n"+
        content;
    sendMessage(email, function () {
        console.log(arguments);
    });
}
Run Code Online (Sandbox Code Playgroud)

` 控制台信息日志为:

"[? {?  "id": "gapiRpc",?  "result": {?   "id": "1471e09d88000bf7",?   "threadId": "1471e09d88000bf7",?   "labelIds": [?    "SENT"?   ]? …
Run Code Online (Sandbox Code Playgroud)

javascript gmail google-api gmail-api

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

Gmail(企业版)API 不允许从 Alias 发送电子邮件?

我想使用不同的“角色”(例如 info@ 、 customer-support@ 、 tech-support@ 、 no-reply@ )向我的客户发送电子邮件。

我尝试过两种方法:

  1. 我的 Gmail for Business 应用程序中有多个“用户”/帐户。
  2. 具有多个别名的单个 Gmail 帐户。

我首先为我的 Gmail for Business 应用程序设置一个具有全局委托的服务帐户。

为了测试它是否有效,我设置了 2 个用户:lev@mydomain.com 和 root@mydomain.com。事实上,我可以成功地从 lev@ 和 root@ 发送电子邮件。

然而,当我尝试为我的应用程序添加 5 个不同的用户帐户时,Gmail 对机器人/滥用感到偏执,并要求我证明所有帐户都是“人性化”的,包括设置密码、登录和通过电话进行短信验证。此外,他们要求不同的账户使用不同的手机来证明是不同的人。因此,账户的设置成为一个主要问题。

我还想避免创建多个帐户,因为我要为每个帐户付费,而且从语义上讲,所有角色都只是一个帐户。所以别名似乎是一个更好的主意。

问题是,当我尝试发送电子邮件并将“发件人”字段设置为别名(例如 from:no-reply@mydomain.com)时,我收到以下异常:

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Delegation denied for root@mydomain.com",
    "reason" : "forbidden"
  } ],
  "message" : "Delegation denied for root@mydomain.com"
}
Run Code Online (Sandbox Code Playgroud)

有人遇到并解决过这个问题吗?

认证/凭证代码如下:

/*
 * Set …
Run Code Online (Sandbox Code Playgroud)

google-oauth google-oauth-java-client gmail-api

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

使用 Gmail API 下载附件失败

使用与 API 参考站点类似的代码,我在 for 循环开始时收到 null 异常错误。我已经检查过该附件message是否有附件,但它似乎是内联的。对于附件不是内联的其他邮件,它确实有效。

我需要做什么才能获取内联附件

public List<Attachment> getAttachments(String messageId) throws IOException
{
    List<Attachment> attachments = new ArrayList<>();
    Message message = SERVICE.users().messages().get(USER, messageId).execute();
    List<MessagePart> parts = message.getPayload().getParts();
    if (parts != null)
    {
    
        for (MessagePart part : parts)
        {
            if (part.getFilename() != null && part.getFilename().length() > 0)
            {
                String attId = part.getBody().getAttachmentId();
                MessagePartBody attachPart = SERVICE.users().messages().attachments().
                        get(USER, messageId, attId).execute();

                byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
                Attachment attachment = new Attachment(part, attachPart, fileByteArray);
                attachments.add(attachment);
            }
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

java gmail-api

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

了解 Gmail api 配额

我已阅读此处的 gmail api 配额说明(https://developers.google.com/gmail/api/v1/reference/quota),但仍无法理解导致我们超出限制的原因。

问题 1:每用户配额中的用户是多少?我不确定该用户是个人 gmail 用户,还是使用 gmail api 的服务客户端。

问题 2:我们已经多次看到以下错误,但没有看到任何明显的限制。

"error": {
 "errors": [
  {
   "domain": "usageLimits",
   "reason": "rateLimitExceeded",
   "message": "Rate Limit Exceeded"
  }
 ],
 "code": 429,
 "message": "Rate Limit Exceeded"
}
Run Code Online (Sandbox Code Playgroud)

我们的速度低于 250 单位/秒和 25,000 单位/100 秒。我们只使用history.list和message.get调用,不发送或修改。
我还缺少其他配额吗?

google-api quota gmail-api

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

Gmail API - 有没有办法按接收时间排序的顺序列出邮件?

有没有办法使用 Google Mail API 按接收时间的顺序列出 Gmail 邮件?

尽管 API 按时间倒序返回邮件。对于像 10 封邮件这样的非常小的数据集,我发现了差异。

邮件列表API响应:

 {
 "messages": [
  {
   "id": "15afb61b8d220a19",
   "threadId": "15afb61b8d220a19"
  },
  {
   "id": "15afb618f941d73f",
   "threadId": "15afb618f941d73f"
  },
  {
   "id": "15afb6174711c7af",
   "threadId": "15afb6174711c7af"
  },

  ...
  ...
  {
   "id": "159bc283f63d5eb7",
   "threadId": "159bc283f63d5eb7"
  },
  {
   "id": "159bc283dc97cd87",
   "threadId": "159bc283dc97cd87"
  },
  {
   "id": "159bc283d95f097c",
   "threadId": "159bc283d95f097c"
  }
 ],
 "resultSizeEstimate": 9
}
Run Code Online (Sandbox Code Playgroud)

回复的第一条消息(最新):

Id: 15afb61b8d220a19
Date: "Thu, 23 Mar 2017 19:06:08 +0530" 
internalDate: "1490276168000"
Run Code Online (Sandbox Code Playgroud)

列表中的第二封邮件:

Id: 15afb618f941d73f
Date: "Thu, 23 Mar 2017 …
Run Code Online (Sandbox Code Playgroud)

gmail google-api gmail-api

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

Python-使用 format='raw' 解析 gmail messages().get()

我正在使用 gmail api 从我的邮箱获取消息。但是当在 get 方法中使用 format='raw' 时,我无法解析 'raw' 字段中返回的数据。

service.users().messages().get(userId='me', id=message_id, format='raw').execute()
Run Code Online (Sandbox Code Playgroud)

这是在文档中,

“raw”:以 base64url 编码字符串的形式返回原始字段中包含正文内容的完整电子邮件数据;不使用有效负载字段。

我尝试过

  • base64.urlsafe_b64decode(raw.encode('utf-8'))
  • base64.urlsafe_b64decode(raw.encode('ascii'))
  • base64.urlsafe_b64decode(raw.encode('cp932')) 消息是日语
  • base64.urlsafe_b64decode(原始)

返回值均不可读。

我得到了所有 ASCII 单词和数字,但没有一个日语单词可读:

  • 送到了(送去了
  • 已收到
  • X-已收到
  • ...
  • 内容类型:文本/纯文本;字符集=“UTF-8”
  • 内容传输编码:base64

当涉及日语(或消息正文?)时,消息变成类似: '''6Ie855Sw5qeYDQoNCuOBhOOBpOOCguOBiuS4luipseOBq+OBquOBo+OBpuOBiuOCiuOBvuOBmeOA gg0K44Oq44Ol44Km44Gn44GZ ...... PjwvZGl2PjwvZGl2Pjw vZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg0KPC9kaXY+ PC9kaXY+PC9kaXY+DQo='''

请帮帮我!!

python-3.x gmail-api

6
推荐指数
0
解决办法
1389
查看次数

使用 Gmail API 获取 Google 群组电子邮件

我正在努力获取电子邮件的大型文本语料库。没有允许读取 Google 网上论坛中的消息的 API。因此,另一种方法是使用属于该组成员的 Gmail 帐户。通过使用此 Gmail,我可以检查发送到该组的所有邮件。我正在使用 python 和 Gmail API 来获取邮件。我面临的问题是,我无法获取来自群组的电子邮件。

results = service.users().messages().list(userId='me',q="from:support-dev-group@wso2.com", maxResults=10).execute()

当我用另一个普通用户 ID 替换 时,from:它就可以工作了。当我用组电子邮件 ID 替换 时,from:它给出的结果为零。我可以获得通过 Gmail 获取群组 Gmail 的实际代码吗?

第二个问题是,

当我使用某人的邮件查询时:

results = service.users().messages().list(userId='me',q="from:xyz@wso2.com", maxResults=10).execute()
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果

{'resultSizeEstimate': 82, 'messages': [{'id': '1653929b0b414390', 'threadId': '1644c19f390faf28'}, {'id': '165330aaa5bb9134', 'threadId': '16532ef13e7eec8d'}......
Run Code Online (Sandbox Code Playgroud)

这里只返回消息id。为了获取带有标题的正文的邮件,我必须再次查询每个 id。我无法在一次查询中获取完整的 JSON 吗?

python email gmail google-groups gmail-api

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

收到新邮件通知 - Gmail API

当我收到新电子邮件时,我尝试从 Gmail API 获取推送。

到目前为止,我发现的唯一方法是每 10-15 分钟进行一次轮询,检查是否有新的未读消息,以便我可以再次查询以获取最新消息。

我想要的解决方案是告诉 Gmail Api 向我推送传入的新邮件或有新邮件要拉取的警报。

我最初不想在这里发布我的问题,但 Gmail Api 支持将我重定向到这里。

谢谢

gmail-api

6
推荐指数
0
解决办法
545
查看次数

Python:从标签(gmail)下载所有电子邮件为pdf

我想从 gmail 下载 100 多封电子邮件的 pdf 格式。通过 gmail 中的打印选项手动下载所有内容会太长。

此 python 脚本检索所选标签中的电子邮件。我怎样才能把这封电子邮件转换成pdf文件。

# source  = https://developers.google.com/gmail/api/quickstart/python?authuser=2

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request



SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']

def main():
    creds = None

    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request()) …
Run Code Online (Sandbox Code Playgroud)

python pdf download python-3.x gmail-api

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

Gmail API 错误 400 - 前提条件检查失败的情况不一致

我正在努力解决 Gmail API 问题。需要开始的一些事情:

  • 使用 OAuth2
  • 我的帐户已启用 GSuite
  • 范围包括修改
  • 我的程序是用 Go 语言编写的

我的程序正在代表经过身份验证的用户发送电子邮件。几乎所有 Gmail API 功能都可以完美运行 - 我能够创建草稿、在不创建草稿的情况下发送电子邮件、对标签进行操作等。

该问题似乎仅在我尝试使用以下方法发送草稿对象时才会发生users.drafts.send: https: //developers.google.com/gmail/api/reference/rest/v1/users.drafts/send

当我创建草稿消息然后触发发送消息的请求时,我不一致地返回错误 400Precondition check failed.

这是对端点https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart的 POST 请求

让我完全困惑的奇怪部分是,半秒后我可以使用相同的 OAuth 访问令牌针对不同的草稿消息 ID 发出相同的请求,并且效果完美。

此请求失败 - 时间戳 2022-01-04T19:43:50.278Z

Method:POST URL:https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Authorization:[Bearer ya29.a0ARrdaM9mREDACTED] Content-Type:[application/json]] Body:{Reader:0xc0004e7dd0} GetBody:0x7198e0 ContentLength:70 TransferEncoding:[] Close:false Host:gmail.googleapis.com Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc000044060

身体对象: {"id":"r155747228619414494","message":{"threadId":"17e269e7bb12bece"}}

此请求成功 - 时间戳 2022-01-04T19:43:50.230Z

Method:POST URL:https://gmail.googleapis.com/gmail/v1/users/me/drafts/send?uploadType=multipart Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Authorization:[Bearer ya29.a0ARrdaM9mREDACTED] Content-Type:[application/json]] Body:{Reader:0xc00061b920} …

gmail-api

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