NodemailerでGmailを送ってみた

2022.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

JavaScriptやTypeScriptでメールを送るnpmのモジュールに「Nodemailer」というものがあります。

Nodemailer

これを使ってGmailでメールを送ろうとしたのですが、Googleアカウントのメールアドレスとパスワードでは送れませんでした。

結論から先に書くと、執筆時現在ではGmailで送る際に

  • 2段階認証を設定してあること
  • アプリで使う「アプリパスワード」を設定し、そのパスワードを使用すること

が必要なようです。

この設定と今回書いたサンプルプログラムについて書きたいと思います。

アプリパスワードの設定

私の場合はGoogleアカウントに2段階認証は設定済だったので アプリパスワードを以下のように設定しました。

1.Googleのトップ画面の画面右上の自分のアイコンを押下し、「Google アカウントを管理」を開く

2.画面左の「セキュリティ」を開き、「アプリ パスワード」を開く

ここで設定したパスワードを「Nodemailer」で使います。

サンプルプログラム

今回書いたサンプルプログラムは以下の通りです。 メールアドレスとパスワードは環境変数に予め設定し、そこから読み込んでいます。 (「MAIL_ACCOUNT」「MAIL_PASSWORD」というキーで設定しています。)

const main = async () => {
    const nodemailer = require("nodemailer");

    const mail = process.env.MAIL_ACCOUNT;
    const pass = process.env.MAIL_PASSWORD;

    const transporter = nodemailer.createTransport({
        service: "Gmail",
        auth: {
            user: mail,
            pass: pass,
        }
    });

    const info = await transporter.sendMail({
        from: mail,
        to: mail,
        subject: "TestMail",
        text: "This is a test mail",
    });
    
    console.log("Message sent: %s", info.response);
    console.log("finish");
};

main();

一度「アプリパスワード」を設定すると、すんなりとGmailを送ることができました。

参考サイト

  • https://nodemailer.com/about/
  • https://stackoverflow.com/questions/45478293/username-and-password-not-accepted-when-using-nodemailer