在Node.js中使用Gmail API发送带有附件的电子邮件,可以按照以下步骤进行:
npm install googleapis google-auth-library nodemailer
credentials.json
的文件,并将以下内容复制到文件中:{
"installed": {
"client_id": "YOUR_CLIENT_ID",
"project_id": "YOUR_PROJECT_ID",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "YOUR_CLIENT_SECRET",
"redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"]
}
}
将YOUR_CLIENT_ID
和YOUR_CLIENT_SECRET
替换为你在Google Cloud Console中创建的凭据的实际值。
sendEmail.js
的文件,并将以下代码复制到文件中:const fs = require('fs');
const readline = require('readline');
const { google } = require('googleapis');
const { OAuth2Client } = require('google-auth-library');
const nodemailer = require('nodemailer');
// 读取凭据文件
const credentials = require('./credentials.json');
// 定义要发送的邮件内容
const emailContent = {
to: 'recipient@example.com',
subject: '邮件主题',
text: '邮件正文',
attachments: [
{
filename: '附件文件名',
path: '附件文件路径'
}
]
};
// 创建OAuth 2.0客户端
const oAuth2Client = new OAuth2Client(
credentials.installed.client_id,
credentials.installed.client_secret,
credentials.installed.redirect_uris[0]
);
// 获取访问令牌
async function getAccessToken() {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: ['https://www.googleapis.com/auth/gmail.send']
});
console.log('请访问以下URL并授权:\n', authUrl);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve, reject) => {
rl.question('请输入授权码:', (code) => {
rl.close();
oAuth2Client.getToken(code, (err, token) => {
if (err) {
reject(err);
} else {
resolve(token);
}
});
});
});
}
// 发送邮件
async function sendEmail(auth) {
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'your.email@gmail.com',
clientId: credentials.installed.client_id,
clientSecret: credentials.installed.client_secret,
refreshToken: auth.refresh_token,
accessToken: auth.access_token
}
});
const mailOptions = {
from: 'your.email@gmail.com',
...emailContent
};
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
console.error('发送邮件时出错:', err);
} else {
console.log('邮件已发送:', info.response);
}
});
}
// 主函数
async function main() {
try {
const token = await getAccessToken();
oAuth2Client.setCredentials(token);
sendEmail(token);
} catch (err) {
console.error('发生错误:', err);
}
}
// 执行主函数
main();
sendEmail.js
文件中,将recipient@example.com
替换为收件人的实际电子邮件地址,将邮件主题
替换为邮件的实际主题,将邮件正文
替换为邮件的实际正文,将附件文件名
替换为附件的实际文件名,将附件文件路径
替换为附件的实际文件路径。node sendEmail.js
请注意,以上代码示例中使用了nodemailer
库来发送电子邮件,并使用了googleapis
库来进行Gmail API的身份验证和授权。这些库提供了丰富的功能和选项,可以根据实际需求进行进一步的定制和扩展。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云