对于那些一直在寻找工作示例/代码片段的人,请按照 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);
});