SendGridとNode.jsで添付ファイル付きメールを送信する方法

November 19, 2019
レビュー担当者

SendGridとNode.jsで添付ファイル付きメールを送信する方法

この記事はNathaniel Okenwaこちらで公開した記事(英語)を日本語化したものです。

Node.jsアプリケーションからTwilio SendGrid APIを使用してメールを送信する際、メールにファイルを添付したい場合もあります。SendGrid Email APIなら、とても簡単に送信するメールにファイルを添付できます。本稿では、SendGrid経由で送信されるメールにドキュメントを添付する方法をご紹介します。

必要条件

このチュートリアルを進めるには、以下の項目が必要です。

プログラムの設定

Twilio SendGridアカウントでAPIキーを作成します。APIキーの名前はお好きなもので構いません。APIキーは後で使用するため、必ず記録しておいてください。

APIキー作成

このAPIキーは、JavaScriptのコードからアクセスできる環境変数として設定し、コードに直接書き込まないようにして保存することを推奨します。環境変数SENDGRID_API_KEYの値を、SendGridアカウントからのAPIキーに設定します。環境変数の設定について詳しくは、ブログ記事「Node.jsで環境変数を利用する方法」をご参照ください。

後ほど、この環境変数を利用します。

メールの送信

SendGridのアカウントとAPIキーを取得したので、コードを書いてメールを送信する準備ができました。

まず、ターミナルを開いて、プロジェクトのルートディレクトリに移動し、次のコマンドを実行します。

npm init --yes

このコマンドで、npmが依存関係をインストールするためのpackage.jsonファイルを作成します。

次に、以下のコードを実行し、Node用のSendGridヘルパーライブラリをインストールします。

npm install @sendgrid/mail

次に、ルートディレクトリに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);
});

上記スニペットでは、Node File System APIを使用してファイルを読み込み、base64文字列としてエンコードします。ここでは、架空のattachment.pdfファイルを使用しています。index.jsが格納されているフォルダに、メールに添付したいファイルを追加し、attachment.pdfを添付ファイルの名前に置き換えてください。

それでは、msgオブジェクトに添付ファイルのプロパティを追加しましょう。添付ファイルオブジェクトの配列を渡すことで複数の添付ファイルを迅速に送信することもできますが、本稿では、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',
  attachments: [
    {
      content: attachment,
      filename: "attachment.pdf",
      type: "application/pdf",
      disposition: "attachment"
    }
  ]
};

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

先に記録しておいたAPIキーを、SENDGRID_API_KEY環境変数に設定します。ターミナルで以下のコマンドを実行します。

export SENDGRID_API_KEY={APIキー}

toの値を送信先のメールアドレスに置き換えます。fromは、ドメイン認証済み(または単一送信者認証済み)の送信元のメールアドレスに置き換えます。メールアドレスのドメイン認証方法について詳しくは、ブログ記事「Twilio SendGrid Emailのドメイン認証手順」を参照してください。

最後にコードを保存し、ターミナルで次のコマンドを実行し、toメールアドレス宛にメールを送ります。

node index.js

受信ボックスを確認すると、このように送信したメールが確認できます。

受信したメール

まとめ

これでTwilio SendGridで送信するメールに添付ファイルを追加できるようになりましたが、他にもいろいろなことができます。SendGridのInbound Email Parse Webhookを使用して受信メールに応答したり、スマートなFacebook Messenger Botに統合したり、受信SMSメッセージをEメールとして転送することも可能です。また、SendGridドキュメントでは、他にも便利な機能や使い方を数多くご紹介しています。

ご質問や、ご自身で構築されている素晴らしい作品についてのお話など、お気軽にご連絡ください。何を構築されるか、とても楽しみです。

  • Twitter: @ChatterboxCoder
  • Instagram: @ChatterboxCoder
  • メール: nokenwa@twilio.com