标签: gmail-api

为什么 GMail API 会从外发邮件中删除文档类型和注释?

Gmail消息发送 API似乎正在从外发消息中删除文档类型和 HTML 注释。

再现

  1. 转到https://developers.google.com/gmail/api/v1/reference/users/messages/send
  2. 向下滚动到“尝试一下!”
  3. 使用 OAuth 登录
  4. 对于“userId”,输入:me
  5. 对于“原始”,输入以下节点脚本的结果:

生成消息.js

var email = "From: 'me'\r\n" +
  "To: bradvogel@outlook.com\r\n" +
  "Subject: Test Doctype\r\n" +
  "Content-Type: text/html; charset=utf-8\r\n" +
  "\r\n" +
  "<!doctype html>" +
  "<html><body>test <!--[if !mso]>hidden from outlook<!--<![endif]--> </body></html>";

var base64 = new Buffer(email).toString('base64');
var websafeBase64 = base64.replace(/\//g, '_').replace(/\+/g, '-');
console.log(websafeBase64);
Run Code Online (Sandbox Code Playgroud)

实际结果

当我查看在 bradvogel@outlook.com 收到的电子邮件中的原始消息源时,它没有文档类型或注释:

To: bradvogel@outlook.com
Subject: Test Doctype
Content-Type: multipart/alternative; boundary=089e0102fc52abed0a04ff355038

--089e0102fc52abed0a04ff355038
Content-Type: text/plain; charset=UTF-8

test

--089e0102fc52abed0a04ff355038
Content-Type: text/html; charset=UTF-8

<html><body>test  </body></html> …
Run Code Online (Sandbox Code Playgroud)

gmail-api

5
推荐指数
1
解决办法
1286
查看次数

在用户的GMail收件箱中获取邮件

在下面的代码中,我登录,授权应用程序并通过GMail API获取控制台输出。我相信我正在获取线程和线程ID,但是在控制台中看不到消息。

我没有收到任何错误并且得到了输出,就像没有值的键一样。

控制台输出如下所示: 在此处输入图片说明

这是代码:

var CLIENT_ID = 'YOUR_CLIENT_ID';
var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
var USER = 'me';

  /**
   * Called when the client library is loaded to start the auth flow.
   */
  function handleClientLoad() {
    window.setTimeout(checkAuth, 1);
  }

  /**
   * Check if the current user has authorized the application.
   */
  function checkAuth() {
    gapi.auth.authorize(
        {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true},
        handleAuthResult);
  }

  /**
   * Called when authorization server replies.
   *
   * @param {Object} authResult Authorization result.
   */
  function handleAuthResult(authResult) { …
Run Code Online (Sandbox Code Playgroud)

javascript jquery gmail-api

5
推荐指数
1
解决办法
4376
查看次数

threads.get() 和 messages.get() 按什么顺序返回项目列表?

似乎没有记录threads.get()和messages.get()如何对它们返回的结果进行排序。

顺序是按日期/时间降序排列吗?

gmail-api

5
推荐指数
1
解决办法
3348
查看次数

使用 GMail API 静音

是否可以使用 GMail API 将消息静音?https://developers.google.com/gmail/api/

在 GMail 中,如果您搜索 label:mute,您会得到静音对话。如果我尝试应用标签 MUTE 或 MUTED 我会得到:

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/14b37d9bb14bb521/modify?alt=json returned "Invalid label: mute">
Run Code Online (Sandbox Code Playgroud)

表明实际中没有真正的MUTE/MUTED标签。

静音是 GMail 最好的功能之一,没有这个功能,API 就显得毫无意义。

gmail-api

5
推荐指数
1
解决办法
397
查看次数

Gmail api 调用 message.get 时返回 404 错误

Gmail API History.list 返回的 messageId 在调用 message.get 时返回 404。

我使用“INBOX”标签和“history/messagesAdded”字段调用history.list。然后,我调用 message.get 并返回每个 messageId。其中一些返回有效消息,另一些返回以下异常:

Google_Service_Exception
{
   "error": {
   "errors": [
   {
     "domain": "global",
     "reason": "notFound",
     "message": "Not Found"
    }
   ],
  "code": 404,
  "message": "Not Found"
 }
}
Run Code Online (Sandbox Code Playgroud)

什么会导致这种情况呢?看来我们刚刚检索了 messageId,现在没有足够的时间将它们永久删除。

gmail-api

5
推荐指数
1
解决办法
1819
查看次数

Node.js Gmail API 如何访问电子邮件的内容?

我是 Node.js 和 Google Gmail API 的菜鸟。不过,我熟悉客户端 JavaScript。我能够分析代码并理解它。

我能够按照本指南(https://developers.google.com/gmail/api/quickstart/nodejs)访问我的 Gmail 帐户中的标签(代码如下):

var fs = require('fs');
var readline = require('readline');
var google = require('googleapis');
var googleAuth = require('google-auth-library');

// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/gmail-nodejs-quickstart.json
var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
    process.env.USERPROFILE) + '/.credentials/';
var TOKEN_PATH = TOKEN_DIR + 'gmail-nodejs-quickstart.json';

// Load client secrets from a local file.
fs.readFile('client_secret.json', function processClientSecrets(err, content) {
  if (err) {
    console.log('Error loading …
Run Code Online (Sandbox Code Playgroud)

google-api node.js gmail-api

5
推荐指数
1
解决办法
7181
查看次数

GmailApp API 发送限制与 MailApp 相同吗?

我有一个供教师使用的免费工具,可以向班上的每个学生发送电子邮件,了解即将到来的家庭作业对其成绩的影响(“成绩推动”,因此每封电子邮件都是为学生定制的)。该工具通过 GmailApp.sendEmail 方法发送这些电子邮件,并且脚本在用户(在此上下文中为教师/教授)的 Google 帐户下执行。

虽然许多大学都有 G Suite 帐户(1500 个的限制实际上很大,所以并不重要),但并非所有大学都有。一些用户使用他们的个人 @gmail.com 帐户发送这组电子邮件(限制为 100 封;许多班级有超过 100 名学生)。值得注意的是,谷歌最近似乎减少了对消费者帐户的限制(或者至少开始更严格地执行)。

我想改善这里的行为。至少,我希望防止用户尝试发送超出其配额的电子邮件并收到严重错误。MailApp 类具有 getRemainingDailyQuota(),而 GmailApp 则没有。显然,我可以从 MailApp.getRemainingDailyQuota() 获取一个数字,我不知道它是否是“正确的”数字。所以...

MailApp 和 GmailApp 是否有一个配额?即使您通过 GmailApp 发送,MailApp.getRemainingDailyQuota() 是否反映正确的剩余发送量?

quota google-apps-script gmail-api

5
推荐指数
0
解决办法
2355
查看次数

ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] 线程化时的 Gmail

我能够获取包含 Python 查询的电子邮件列表,但是当我从线程内运行代码时,出现错误:

ssl.SSLError: [SSL: WRONG_VERSION_NUMBER]
Run Code Online (Sandbox Code Playgroud)

这是我调用线程的方式:

Thread(target=get_messages_for_label, args=({'recruitment'})).start()
Run Code Online (Sandbox Code Playgroud)

错误发生在这一行:

response = service.users().labels().list(userId=user_id).execute()
Run Code Online (Sandbox Code Playgroud)

但是,当我在没有线程的情况下运行它(作为简单的方法调用)时,它工作得很好。

很难共享中间的代码,因为在线程启动和错误发生之间有相当多的方法调用。

任何帮助,将不胜感激。

ssl multithreading python-3.x gmail-api

5
推荐指数
1
解决办法
1946
查看次数

在 Nodemailer 中使用 OAuth2 时 Gmail API“用户名或密码无效”

我正在尝试将 gmail smtp 与最新版本的 nodemailer 一起使用。我已完成此处描述的步骤。发送邮件时我仍然收到以下错误消息:

错误:无效登录:535-5.7.8 用户名和密码不被接受

这很奇怪,因为我从未尝试使用密码/用户名登录,但我使用 OAuth2 代替:

    transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            type: 'OAuth2',
            user: 'hello@company.com',
            clientId: '<clientId>.apps.googleusercontent.com',
            clientSecret: '<clientSecret>',
            accessToken: '<accessToken>',
            refreshToken: '<refreshToken>',
        }
    });

     transporter.sendMail({
        from: from,
        to: to,
        subject: subject,
        text: message,
        html: htmlMessage
    }, function (err, data) {
            if (err) {
                console.log(err);
                console.log("======");
                console.log(subject);
                console.log(message);
            } else {
                console.log('Email sent:');
                console.log(data);
            }
    });
Run Code Online (Sandbox Code Playgroud)

有谁知道我错过了什么?我尝试执行所有这些步骤来生成这些令牌 3 次,所以我很确定所有凭据都已正确填写。

提前致谢

node.js nodemailer gmail-api

5
推荐指数
1
解决办法
1403
查看次数

Gmail api 使用 Postman 发送

我正在尝试使用 POST 方法使用 gmail API 和 POSTMAN 发送邮件

POST https://www.googleapis.com/upload/gmail/v1/users/example@gmail.com/messages/send
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "invalidArgument"
                "message": "Recipient address required"
            }
        ],
        "code": 400,
        "message": "Recipient address required"
    }
}
Run Code Online (Sandbox Code Playgroud)

标头已放入内容类型:message/rfc822

我知道这必须编码成base64(web_safe),所以我翻译了

"From: sender.example@gmail.com\r\n" +
"To: receiver.example@gmail.com\r\n" +
"Subject: Subject Example\r\n" +
"This is content: hope you got it\r\n"
Run Code Online (Sandbox Code Playgroud)

我也将它们替换为网络安全

 replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); 
Run Code Online (Sandbox Code Playgroud)

所以我得到了如下的base64。所以我把 raw 放在 POST METHOD 的正文中

{
    "raw": "RnJvbTogc2VuZGVyLmV4YW1wbGVAZ21haWwuY29tDQpUbzogcmVjZWl2ZXIuZXhhbXBsZUBnbWFpbC5jb20NClN1YmplY3Q6IFN1YmplY3QgRXhhbXBsZQ0KVGhpcyBpcyBjb250ZW50OiBob3BlIHlvdSBnb3QgaXQNCg"
}
Run Code Online (Sandbox Code Playgroud)

我在谷歌开发者网站上使用了“尝试这个API”,我可以发送它。 https://developers.google.com/gmail/api/v1/reference/users/messages/send

但对于邮递员,我不能。

有什么帮助吗?

gmail postman gmail-api

5
推荐指数
1
解决办法
9960
查看次数