🔥

SendGridについて

2021/09/19に公開

SendGridのサービス

SendGridは全世界で利用されているメール配信サービスです。
クラウドサービスのためアカウントを作成するだけで即日メールを
送信でき、面倒でコストのかかるメールサーバの構築は不要です。

https://sendgrid.kke.co.jp/about/

Twilio SendGridとなっているので、Twilio社のサービスかと思ったが、2019年にTwillio社が20億円で買収したらしい。SendGridは2017年に上場していたらしい。

https://jp.techcrunch.com/2018/10/16/2018-10-15-twilio-acquires-email-api-platform-sendgrid-for-2-billion-in-stock/

https://sendgrid.kke.co.jp/blog/?p=10646

SendGridを使ってメールを送る

Node.jsからメールを送る方法

https://sendgrid.kke.co.jp/blog/?p=12390

  • APIキーを発行する
  • Node.js向けのSendGridヘルパーライブラリをインストールする

TypeScriptでやる場合は以下。

https://simple-hack.com/sendgrid

なるほどとても簡単。

以下手順

TypeScriptで行う想定。まずpackageをinstallする。

npm install @sendgrid/mail
npm install -D ts-node typescript

プログラムを書く

以下の2つファイルを作る。

  • index.ts: メインプログラム。
  • sendgrid-util.ts: SendGridへメールを送る関数を書いたもの。
sendgrid-util.ts
import sgMail from "@sendgrid/mail";

export type msgInfo = {
  to: string;
  from: string;
  subject: string;
  text: string;
};

sgMail.setApiKey(process.env.KEY);

const sendMail = async (info: msgInfo) => {
  const msg = {
    to: info.to,
    from: info.from,
    subject: info.subject,
    text: info.text,
  };
  try {
    const result = await sgMail.send(msg);
    console.log(result);
    console.log("success to sendGrid");
  } catch (error) {
    console.log("failed to sendGrid");
    console.log(error);
  }
};

export default sendMail;
index.ts
import sendMail, { msgInfo } from "./sendgrid-util";

const info: msgInfo = {
  to: "test@test.com", // <送信元>
  from: "test@test.com", // <送信先>
  subject: "タイトル",
  text: "本文",
};
sendMail(info);

実行する

npx ts-node index.ts

成功すると以下のようにレスポンスが返却される。

[
  Response {
    statusCode: 202,
    body: '',
    headers: {
      server: 'nginx',
      date: 'Sun, 19 Sep 2021 00:00:00 GMT',
      'content-length': '0',
      connection: 'close',
      'x-message-id': 'PSVP1ng8QcOc-vwIVo2ItQ',
      'access-control-allow-origin': 'https://sendgrid.api-docs.io',
      'access-control-allow-methods': 'POST',
      'access-control-allow-headers': 'Authorization, Content-Type, On-behalf-of, x-sg-elas-acl',
      'access-control-max-age': '600',
      'x-no-cors-reason': 'https://sendgrid.com/docs/Classroom/Basics/API/cors.html',
      'strict-transport-security': 'max-age=600; includeSubDomains'
    }
  },
  ''
]
success to sendGrid

Discussion