Rad*_*eve 28 email gmail token node.js nodemailer
我正在尝试在节点应用程序中使用一个简单的联系表单nodemailer
.我希望所有的msg都是从我为此目的制作的Gmail帐户发送到我的个人邮件.
在客户端,我所做的就是获取客户的名称/邮件/消息并将其发送到服务器.它在本地工作正常但在部署时无法工作(在heroku btw上).
快速搜索后,看来我必须生成一个ClientId
与ClientSecret
来自谷歌开发者控制台-我做到了-但是,当涉及到产生"刷新令牌" iI'm完全丧失.
var smtpTransport = nodemailer.createTransport("SMTP",{
service:"Gmail",
auth:{
XOAuth2: {
user:"myaccount@gmail.com",
clientId:"",
clientSecret:"",
refreshToken:""
}
}
});
Run Code Online (Sandbox Code Playgroud)
我很困惑:什么是刷新令牌,我该如何获得?
Rad*_*eve 70
本回答原文作者:
所以,我终于弄明白了.我很惊讶我找不到更多的资源,所以那些需要使用
Gmail
的人Nodemailer
我在这里找到答案:http://masashi-k.blogspot.fr/2013/06/sending-mail-with-gmail-using-xoauth2.html
尝试创建一个新用户,如果你已经有一个用户工作不正常.对我来说就是这样.
我希望这对某人有用,
干杯
从技术文档发现这里:
刷新令牌可让您的应用在用户未登录您的应用程序时持续访问Google API.
(......)
注意事项:
请确保安全且永久地存储刷新令牌,因为您只能在第一次执行代码交换流时获取刷新令牌.
发布的刷新令牌数量有限制 - 每个客户端/用户组合一个限制,所有客户端的每个用户另一个限制.如果您的应用程序请求太多刷新令牌,它可能会遇到这些限制,在这种情况下,旧的刷新令牌会停止工作.
另请参阅Offline Access和使用刷新令牌.
如前所述这里,你应该:
特别注意在控制台中创建新用户时指定
https://developers.google.com/oauthplayground
为重定向URI.否则,您将出错.
https://mail.google.com/
因为它是需要的nodemailer
.然后单击" 授权API"按钮.对于那些一直在寻找有效示例/代码段的人,请按照Radioreve的答案进行操作,直到您能够获取访问令牌并刷新令牌。(基本上,请到操场上,确保它要求发送邮件和mail.google.com的访问权限,给予许可,交换令牌的授权代码)
请注意,expires
我输入的时间new Date().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);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15493 次 |
最近记录: |