Node.js Nodemailer/Gmail-什么是刷新令牌,如何获得?
我正在尝试使用Node.js Nodemailer/Gmail-什么是刷新令牌,如何获得?,node.js,email,gmail,token,nodemailer,Node.js,Email,Gmail,Token,Nodemailer,我正在尝试使用nodeEmailer在节点应用程序中创建一个简单的联系人表单。我希望所有的消息都能从我的gmail账户发送到我的个人邮箱 在客户端,我所做的就是获取客户的姓名/邮件/消息并将其发送到服务器。它在本地工作正常,但部署时无法工作(在heroku btw上) 在快速搜索之后,我似乎不得不从谷歌开发者控制台生成ClientId和ClientSecret——我就是这么做的——但当涉及到生成“刷新令牌”时,我完全不知所措 var smtpTransport = nodemailer.
nodeEmailer
在节点应用程序中创建一个简单的联系人表单。我希望所有的消息都能从我的gmail账户发送到我的个人邮箱
在客户端,我所做的就是获取客户的姓名/邮件/消息并将其发送到服务器。它在本地工作正常,但部署时无法工作(在heroku btw上)
在快速搜索之后,我似乎不得不从谷歌开发者控制台生成ClientId
和ClientSecret
——我就是这么做的——但当涉及到生成“刷新令牌”时,我完全不知所措
var smtpTransport = nodemailer.createTransport("SMTP",{
service:"Gmail",
auth:{
XOAuth2: {
user:"myaccount@gmail.com",
clientId:"",
clientSecret:"",
refreshToken:""
}
}
});
我很困惑:刷新令牌到底是什么?如何获取 原著作者的注释: 所以,我终于找到了答案。我很惊讶我找不到更多关于这方面的资源,所以对于那些需要使用
Gmail
和Nodemailer
我在这里找到了答案:
如果你已经有了一个新的用户,但情况不太好,试着创建一个新用户。对我来说就是这样
我希望这对某人有用
干杯
问题1:刷新令牌到底是什么? 根据找到的文件: 当用户未登录到应用程序时,刷新令牌为应用程序提供对Google API的连续访问 (……) 注意事项:
- 请确保安全且永久地存储刷新令牌,因为您只能在第一次执行代码交换流时获取刷新令牌
- 刷新令牌的数量有限制,每个客户端/用户组合有一个限制,所有客户端上每个用户有一个限制。如果您的应用程序请求太多的刷新令牌,它可能会遇到这些限制,在这种情况下,旧的刷新令牌将停止工作
问题2:我如何得到一个? 步骤1:在获取OAuth 2.0凭据 如上所述,你应该:
特别注意指定
https://developers.google.com/oauthplayground
在控制台中创建新用户时作为重定向URI。
否则,您将有一个错误
步骤2:获取位于的刷新令牌
https://mail.google.com/
因为它是nodemailer所需要的。然后单击授权API按钮对于那些四处寻找工作示例/代码片段的人,请按照Radioreve的回答进行操作,直到您能够获得访问令牌和刷新令牌。(基本上,去游乐场,确保它要求访问发送邮件和mail.google.com,给予许可,交换代币的授权码) 请注意,我输入的
expires
时间是newdate().getTime()+2000
,接近操场上看到的过期秒数。我不确定是否必须准确输入访问令牌和过期时间,因为它似乎会自动刷新令牌
使用ECMAScript 6中编写的示例代码:
const user_name = 'something@gmail.com';
const refresh_token = '';
const access_token = '';
const client_id = '';
const client_secret = '';
const email_to = 'receiver@gmail.com';
const nodemailer = require('nodemailer');
let transporter = nodemailer
.createTransport({
service: 'Gmail',
auth: {
type: 'OAuth2',
clientId: client_id,
clientSecret: client_secret
}
});
transporter.on('token', token => {
console.log('A new access token was generated');
console.log('User: %s', token.user);
console.log('Access Token: %s', token.accessToken);
console.log('Expires: %s', new Date(token.expires));
});
// setup e-mail data with unicode symbols
let mailOptions = {
from : user_name, // sender address
to : email_to, // list of receivers
subject : 'Hello ✔', // Subject line
text : 'Hello world ?', // plaintext body
html : '<b>Hello world ?</b>', // html body
auth : {
user : user_name,
refreshToken : refresh_token,
accessToken : access_token,
expires : 1494388182480
}
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
const user\u name='0something@gmail.com';
const refresh_token='';
const access_token='';
const client_id=“”;
const client_secret='';
const电邮至receiver@gmail.com';
const nodemailer=require('nodemailer');
让transporter=nodeEmailer
.createTransport({
服务:“Gmail”,
认证:{
类型:“OAuth2”,
clientId:客户端id,
clientSecret:client_secret
}
});
transporter.on('token',token=>{
log(“生成了新的访问令牌”);
console.log('用户:%s',令牌.User);
console.log('访问令牌:%s',令牌.accessToken);
日志('Expires:%s',新日期(token.Expires));
});
//使用unicode符号设置电子邮件数据
让邮件选项={
发件人:用户名,//发件人地址
收件人:email_to,//收件人列表
主题:“你好✔', // 主题行
text:“Hello world?”,//纯文本正文
html:‘你好,世界?’,//html正文
认证:{
用户:用户名,
刷新令牌:刷新令牌,
accessToken:access\u令牌,
过期日期:1494388182480
}
};
//使用已定义的Transp发送邮件