Node.jsからSendGridを使って添付ファイルを送信する方法

Node.jsからSendGridを使って添付ファイルを送信する方法

この記事は Sending Email with Attachments using SendGrid and Node.js の抄訳です。

Node.jsのアプリケーションからメールで添付ファイルを送るとき、Twilio SendGridのAPIを使用すると簡単に送信できます。今回のブログでは、SendGrid経由でPDFファイルを添付する方法を紹介します。まだNode.jsからSendGridを利用してメールを送ったことがない方は、こちらの記事を読むか、以下の動画を事前にご確認ください。



必要なツール

はじめに以下の3つを準備しましょう。

Node.jsとnpmのインストール(最初に準備してください)
Twilio SendGridの無料アカウント
Twilio SendGrid Node.jsライブラリ

セットアップ

SendGridのアカウントを持っていない方はこちらから登録してください。今回の内容はFreeプランのアカウントで試せます。審査後にアカウントが有効化されたら、APIキーを作成しましょう。名称は自由に付けてもらって構いません。生成されたAPIキーは後で使うのでメモしておいてください。

Create API Key

APIキーはコードに直接書き込まず、JavaScriptからアクセスできる環境変数に保存するといいでしょう。今回はSENDGRID_API_KEYという環境変数にAPIキーを設定します。環境変数の設定方法がわからない場合はこちらのチュートリアルを参考にしてください。

メールを送る

準備が整ったらメールを送ってみましょう。冒頭で紹介したこちらの記事を試した方は、次のようなindex.jsファイルがあるはずです。

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
  to: 'test@example.com',
  from: 'test@example.com',
  subject: 'Sending with SendGrid is Fun',
 text: 'and easy to do anywhere, even with Node.js',
};
sgMail.send(msg).catch(err => {
  console.log(err);
});

Twilio SendGridのNodeライブラリがインストールされているか確認しましょう。入っていない場合は作業フォルダで次のコマンドを実行してください。

npm install @sendgrid/mail

添付ファイルを送る際、Node.jsのFile System APIを使用してファイルを読み込み、そのデータをBASE64形式の文字列にエンコードします。次のコードではattachment.pdfという仮のファイル名を付けていますが、実際に添付するファイル名に置き換えてください。(添付ファイルはindex.jsと同じフォルダにある必要があります)

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const fs = require("fs");

pathToAttachment = `${__dirname}/attachment.pdf`;
attachment = fs.readFileSync(pathToAttachment).toString("base64");

const msg = {
  to: test@example.com',
  from: 'test@example.com',
  subject: 'Sending with SendGrid is Fun',
  text: 'and easy to do anywhere, even with Node.js',
};
sgMail.send(msg).catch(err => {
  console.log(err);
});

続いてmsgオブジェクトに対して添付ファイルに関するプロパティ(attachments)を追加します。attachmentsは配列で渡せるので複数の添付も可能ですが、今回はattacment.pdfのみ送ります。

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const fs = require("fs");

pathToAttachment = `${__dirname}/attachment.pdf`;
attachment = fs.readFileSync(pathToAttachment).toString("base64");

const msg = {
  to: test@example.com',
  from: 'test@example.com',
  subject: 'Sending with SendGrid is Fun',
  text: 'and easy to do anywhere, even with Node.js',
  attachments: [
    {
      content: attachment,
      filename: "attachment.pdf",
      type: "application/pdf",
      disposition: "attachment"
    }
  ]
};

sgMail.send(msg).catch(err => {
  console.log(err);
});

コードを実行する前にSENDGRID_API_KEYの環境変数が設定されているか確認してください。また、コードが正しく動作することを確認するために、必ず宛先を自分のメールアドレスに置き換えましょう。

最後に、コードを保存したらターミナルで次のコマンドを実行してメールを送ります。

node index.js

受信トレイに次のような添付ファイル付きのメールが届いているか確認しましょう。

受信メール

おわりに

Twilio SendGridを使って添付ファイルの送信ができるようになりましたが、他にもできることは色々あります。たとえばInbound Parse Webhookを使うことで、受信したメールに対して自動応答できますし、Facebook Messengerのボットを作る、あるいはメールの内容をテキストにして返すといったこともできます。SendGridのドキュメントでは様々な機能や使い方を紹介しているので、是非チェックしてみてください!

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。