Nodemailerを使って特定のGmailアカウントを経由してメールを送信する方法を以下にまとめておく。
https://www.googleapis.com/auth/gmail.send
を追加Google Workspaceで管理しているドメインの場合は、ドメイン全体の委任を有効化する必要がある。
https://www.googleapis.com/auth/gmail.send
を追加して「Authorize」をクリックnpm install nodemailer googleapis
ダウンロードしたJSONのキーファイルの中身は以下のようになっている。 このファイルの中から、以下の値を環境変数に設定する。
{
"type": "service_account",
"project_id": "xxxxxxxxx",
"private_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----\n...",
"client_email": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com",
"client_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
GOOGLE_CLIENT_EMAIL=
GOOGLE_PRIVATE_KEY=
GOOGLE_PROJECT_ID=
GOOGLE_FROM_EMAIL=
import nodemailer from "nodemailer";
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
type: "OAuth2",
user: process.env.GOOGLE_FROM_EMAIL!,
serviceClient: process.env.GOOGLE_CLIENT_EMAIL!,
privateKey: process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, "\n"), // 改行コードを変換
},
});
const result = await transporter.sendMail({
from: {
name: "タコ",
address: process.env.GOOGLE_FROM_EMAIL!,
},
to,
subject,
text,
html,
});
private_keyには改行コードが含まれている。
環境変数に設定したときに改行コードが文字列として認識されてしまうため、改行コードを変換する必要がある。
const privateKey = process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, "\n");
以上。