使用Node.js发送Gmail邮件
关于如何通过Gmail发送电子邮件的方法
节点版本
v14.18.2
1. 创建项目
登入GCP并创建一个适当的项目。
2. 激活Gmail API
打开API库并启用GmailAPI。
https://console.cloud.google.com/apis/library
3. 创建认证信息 zuò
打开认证信息页面 https://console.cloud.google.com/apis/api/gmail.googleapis.com/
点击”创建身份认证信息”
点击”设置同意页面”
用户类型:选择外部,并点击创建按钮。
在应用注册的编辑页面上输入各种信息。
从添加或删除权限范围中,选择“…/auth/gmail.send”,并进行添加和保存。
4. 创建认证信息 OAuth 客户端 ID
创建身份验证信息,然后创建OAuth客户端ID
选择如下方式:
应用程序:桌面应用程序
名称:任意
当你创建了客户端后,点击弹出窗口左下方的「JSON下载」,下载凭证文件并将其命名为credentials.json。
在本地环境下编写源代码
安装下列Nodejs软件包
npm install googleapis nodemailer
请执行以下代码:
请将setSendMail()的部分更改为发送的内容。
credentials.json是由上述创建的客户端ID的JSON文件,
token.json是在认证通过后生成的。
const MailComposer = require('nodemailer/lib/mail-composer');
const { Buffer } = require('node:buffer');
const fs = require('fs').promises;
const path = require('path');
const process = require('process');
const {authenticate} = require('@google-cloud/local-auth');
const {google} = require('googleapis');
const credentials = require ( "./credentials.json" );
const tokens = require ( "./_token.json" );
const SCOPES = [
'https://www.googleapis.com/auth/gmail.send'
];
const TOKEN_PATH = path.join(process.cwd(), 'token.json');
const CREDENTIALS_PATH = path.join(process.cwd(), 'credentials.json');
async function loadSavedCredentialsIfExist() {
try {
const content = await fs.readFile(TOKEN_PATH);
const credentials = JSON.parse(content);
return google.auth.fromJSON(credentials);
} catch (err) {
return null;
}
}
async function saveCredentials(client) {
const content = await fs.readFile(CREDENTIALS_PATH);
const keys = JSON.parse(content);
const key = keys.installed || keys.web;
const payload = JSON.stringify({
type: 'authorized_user',
client_id: key.client_id,
client_secret: key.client_secret,
refresh_token: client.credentials.refresh_token,
});
await fs.writeFile(TOKEN_PATH, payload);
}
async function authorize() {
let client = await loadSavedCredentialsIfExist();
if (client) {
return client;
}
client = await authenticate({
scopes: SCOPES,
keyfilePath: CREDENTIALS_PATH,
});
if (client.credentials) {
await saveCredentials(client);
}
return client;
}
async function createMail(subject, to, text){
const mail = await new MailComposer({
to,
text,
subject,
textEncoding: "base64",
}).compile().build()
const raw = Buffer.from(mail)
.toString("base64")
.replace(/\+/g, "-")
.replace(/\//g, "_")
.replace(/=+$/, "")
return raw
}
function setSendMail(auth) {
const gmail = google.gmail({version: 'v1', auth});
sendMail(gmail,
"題名",
"test_taro@gmail.com",
"本文")
}
async function sendMail (gmail,subject, to, text){
const raw = await createMail(subject, to, text)
await gmail.users.messages.send({
userId: "me",
requestBody: {
raw,
},
})
}
authorize().then(setSendMail).catch(console.error);
以上
参考:
https://qiita.com/muuuuuwa/items/822c6cffedb9b3c27e21
请参考以下链接:https://qiita.com/muuuuuwa/items/822c6cffedb9b3c27e21。