Gmailから自動で電子メールを送信したい場面は意外と多いものの、Gmailのセキュリティは日に日に強化されており、気軽にメールを送信できないようになっています。そこで、今回は、Node.jsを使ってGmailを自動送信する方法をまとめてみます。
まだまだ現役のメール送信を自動化しよう
友人同士の連絡には、SNSやLINEなどが使われることが増えましたが、ビジネス用途ではまだまだ電子メールが積極的に利用されています。それで、チームメンバーや顧客に電子メールを一括送信したい場面というのは、意外と多いものです。
今回は、JavaScript実行エンジンのNode.jsをPCにインストールしてメールの自動送信システムを作ってみましょう。なお、Node.jsのインストールについては、本連載の第2回で紹介しています。まだインストールしていない人は、手順を参照してください。
Gmail側でアプリパスワードを取得しよう
なお、Gmailを使ってメール送信する際に大切なことですが、Gmail側で設定が必要になります。まず、Googleアカウントのセキュリティ設定画面にアクセスします。そして、「Googleへのログイン」にて「2段階認証プロセス」をオンに設定します。
続いて、アプリパスワードをクリックします。そして、改めてGoogleアカウントでログインします。それから、アプリパスワードの生成画面で、「メール」「Mac(またはWindows)」を選択して「生成」ボタンをクリックします。
すると、パスワードが生成されるので、このアプリパスワードをメモっておきましょう。なお、このアプリパスワードは手軽に作成と削除が可能です。メールの自動送信が必要なくなったら速やかにこのアプリパスワードを削除しましょう。
プログラムを作ろう
今回は、Nodemailerというパッケージを利用してメールを送信してみます。ターミナル(WindowsではPowerShell)を起動して、以下のコマンドを実行しましょう。
npm init -f
npm install nodemailer
すると、node_modulesというディレクトリが作成されて、Nodemailerがインストールされます。そこで、同じディレクトリに以下のプログラムを作成します。そして「testmail.js」という名前で保存しましょう。なお、★マークの部分は自身の設定に書き換える必要があります。
// Nodemailerを使う --- (*1)
const nodemailer = require('nodemailer')
// 認証情報などを設定してNodemailerオブジェクトを生成 --- (*2)
const porter = nodemailer.createTransport({
service: 'gmail',
port: 465,
secure: true,
auth: {
user: '★★★@gmail.com', // Gmailアカウント --- (*3)
pass: '★★★' // アプリパスワード --- (*4)
}
})
// メールを送信する --- (*5)
porter.sendMail({
from: '★★★@gmail.com', // Gmailアカウント --- (*6)
to: '★★★@example.com', // 送信先のアドレス --- (*7)
subject: 'テスト', // 件名
text: '送信テストです。' // メール本文
}, function (err, info) {
if (err) { // エラーの場合 --- (*8)
console.error(err)
return
}
// 正しく送信できた場合 --- (*9)
console.log('ok', info)
})
プログラムを実行するには、ターミナルで以下のコマンドを実行します。
node testmail.js
プログラムを実行して、正しくメールを送信すると、ターミナルに送信完了と送信情報が表示されます。そして、メールの送信先を開いてメールを受信したことを確認してください。
プログラムを確認してみましょう。(*1)ではNodemailerパッケージを使うように、requireでモジュールの取り込みを記述します。(*2)ではGmailの認証情報を指定して、Nodemailerのオブジェクトを生成します。読者の皆さんの書き換えが必要なのは、Gmailアカウントを指定する(*3)と先ほど取得したアプリパスワードを指定する(*4)の部分です。
(*5)の部分で実際にメールを送信します。(*6)には送信元のGmailアドレスを指定します。(*2)で指定したのと同じアドレスを指定します。(*7)には送信先のメールアドレスを指定します。それから、subjectには件名、textにはメールの本文を指定します。
なお、Nodemailerでは、メールの送信が完了した時にコールバック関数が実行されます。(*8)の部分にはメールの送信に失敗した時の処理を記述します。(*9)の部分には正しく送信できた時の処理を記述します。
添付ファイルをメールに付けたい場合
次に添付ファイルを付けたメールを送信したい場合のプログラムを確認してみましょう。以下のプログラムを「testattach.js」という名前で保存します。また、同じフォルダに「test.pdf」というPDFファイルを用意しておきましょう。