发送电子邮件与gmail API不工作
send email with gmail api not working
我正在尝试发送电子邮件,通过使用谷歌api在node.js
var sendmsg = function(auth) {
var to = 'foo@gmail.com',
subject = 'Hello World',
content = 'send a Gmail.'
var email = "To: "+ to +"'r'n"+
"Subject: "+subject+"'r'n"+
content;
var base64EncodedEmail = new Buffer(email).toString('base64');
var gmail = google.gmail('v1');
var request = gmail.users.messages.send({
'userId': auth,
'message': {
'raw': base64EncodedEmail
}
}, function (err, result) {
console.log('result'+result);
});
};
我从google文档中的快速开始示例中选取了这个示例,它读取了我的电子邮件帐户中的标签(它工作得很好)。我把作用域改成:
var SCOPES = ['https://mail.google.com/',
'https://www.googleapis.com/auth/gmail.modify',
'https://www.googleapis.com/auth/gmail.compose',
'https://www.googleapis.com/auth/gmail.send'];
并创建var = email
var to = 'foo@gmail.com',
subject = 'Hello World',
content = 'send a Gmail.'
var email = "To: "+ to +"'r'n"+
"Subject: "+subject+"'r'n"+
content;
然后我只是试图使用gmail.users.messages.send方法…但是当运行时,结果返回以下内容:
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Bad Request</H1>
<H2>Error 400</H2>
</BODY>
</HTML>
你知道我错过了什么吗?我认为我创建var 'email'的方式是错误的,但我不确定它应该如何
userId
-字段的值必须是发件人的电子邮件地址(或简称me
), auth
-对象必须在auth
字段中传递,resource
-字段中传递消息。您的消息缺少From
标题和在内容有效之前的额外新行。消息也必须是base64url编码的:
function sendMessage(auth, from, to, subject, content) {
// The Gmail API requires url safe Base64
// (replace '+' with '-', and '/' with '_')
var encodedEmail = new Buffer(
'From: ' + from + ''r'n' +
'To: ' + to + ''r'n' +
'Subject: ' + subject + ''r'n'r'n' +
content
).toString('base64').replace(/'+/g, '-').replace(/'//g, '_');
var gmail = google.gmail('v1');
var request = gmail.users.messages.send({
auth: auth,
userId: 'me',
resource: {
raw: encodedEmail
}
}, function (err, result) {
console.log('result:', result);
});
};
与其自己构建body,我强烈建议使用Nodemailers系统:
const sendMail = async () => {
const mail = await new MailComposer({
to: ...,
from: ...,
subject: ...,
html: ...,
});
const message = await mail.compile().build();
const encodedMessage = message
.toString('base64')
.replace(/'+/g, '-')
.replace(/'//g, '_')
.replace(/=+$/, '');
await gmail.users.messages.send({
userId: 'me',
requestBody: { raw: encodedMessage },
});
}
相关文章:
- 谷歌地图Api和JS代码不工作
- Backbone/Facebook API未按预期工作
- 在自动完成中使用Google Maps Places API;API不工作
- 给出<选项>标记一个类?API调用不工作
- Youtube Javascript API播放/暂停/停止不工作
- AWS API网关返回400错误请求,但Postman工作正常
- 天气应用 API 不再工作
- $.getJSON 和 google fonts API 停止在 Internet Explorer 中工作,jQuer
- 谷歌地图API停止在Wordpress模板中工作
- Yelp API、OAuth和Angular与JSONP只工作一次
- 噩梦与YouTube API和播放视频工作
- 在iPhone上,Vimeo Javascript API.play()函数没有'播放完视频后才能工作
- 如何让蒸汽 API 工作
- 谷歌图表api工作不正常
- 我不能让Youtube API工作
- 谷歌地图的js api工作在浏览器上,但不是在cordova应用程序
- 谷歌地图API工作时,我打破然后继续,不'否则
- 谷歌地方自动完成api工作无处不在,但子域
- 路由到api工作错误
- 巨人炸弹 API 工作