Gmail消息发送 API似乎正在从外发消息中删除文档类型和 HTML 注释。
生成消息.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获取控制台输出。我相信我正在获取线程和线程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) 似乎没有记录threads.get()和messages.get()如何对它们返回的结果进行排序。
顺序是按日期/时间降序排列吗?
是否可以使用 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 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,现在没有足够的时间将它们永久删除。
我是 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) 我有一个供教师使用的免费工具,可以向班上的每个学生发送电子邮件,了解即将到来的家庭作业对其成绩的影响(“成绩推动”,因此每封电子邮件都是为学生定制的)。该工具通过 GmailApp.sendEmail 方法发送这些电子邮件,并且脚本在用户(在此上下文中为教师/教授)的 Google 帐户下执行。
虽然许多大学都有 G Suite 帐户(1500 个的限制实际上很大,所以并不重要),但并非所有大学都有。一些用户使用他们的个人 @gmail.com 帐户发送这组电子邮件(限制为 100 封;许多班级有超过 100 名学生)。值得注意的是,谷歌最近似乎减少了对消费者帐户的限制(或者至少开始更严格地执行)。
我想改善这里的行为。至少,我希望防止用户尝试发送超出其配额的电子邮件并收到严重错误。MailApp 类具有 getRemainingDailyQuota(),而 GmailApp 则没有。显然,我可以从 MailApp.getRemainingDailyQuota() 获取一个数字,我不知道它是否是“正确的”数字。所以...
MailApp 和 GmailApp 是否有一个配额?即使您通过 GmailApp 发送,MailApp.getRemainingDailyQuota() 是否反映正确的剩余发送量?
我能够获取包含 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)
但是,当我在没有线程的情况下运行它(作为简单的方法调用)时,它工作得很好。
很难共享中间的代码,因为在线程启动和错误发生之间有相当多的方法调用。
任何帮助,将不胜感激。
我正在尝试将 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 次,所以我很确定所有凭据都已正确填写。
提前致谢
我正在尝试使用 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-api ×10
node.js ×2
gmail ×1
google-api ×1
javascript ×1
jquery ×1
nodemailer ×1
postman ×1
python-3.x ×1
quota ×1
ssl ×1