使用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。

广告
将在 10 秒后关闭
bannerAds