メールプラグイン

メールプラグインについて

メールプラグインを使用すると、SendGrid経由でメールを送信することが出来るようになります。
メールプラグインはクライアントからのAPI経由または、サーバーの他API呼び出し時にメール送信処理を入れ込むことで利用可能です。
セキュリティ上の観点からAPIを一般公開するようなプロジェクトでは、後者の他API呼び出し時にメール送信処理を入れ込むことをお勧めします。

メールプラグインの有効化

プラグイン設定にて、メールプラグインを有効にしてください。
メールプラグインを有効にした状態でサーバーのビルドを行うとメールプラグインのAPIが生成されます。
なお、メールプラグインはSendGridを利用してメールを送信するため、実際に使用するには後述するSendGridへの登録が別途必要になります。

メールプラグインの初期設定

メールプラグインはSendGrid経由でメールを送信するため、SendGridの登録が別途必要になります。
SendGridは月に12,000通まで無料で利用することが可能なため、余程大規模なプロジェクトで無い限り追加の費用は発生しません。
また、SendGridの管理画面にてメールの到達確認ドメインの認証を行うことも可能です。

1. SendGridの登録

GCPのMarketplaceからSendGrid Email APIに登録します。
登録はコチラから
※リンクを開いた際に登録したいGCPプロジェクトが指定されているか必ずご確認ください。

2. SendGridのAPI Keyを取得

SendGrid管理画面にて、API Keyを取得します。
API KeyはSendGrid管理画面のSettingsのAPI Keysの箇所から取得できます。
詳しくはコチラをご確認ください

3. SendGridのAPI Keyをサーバーに登録

2.で取得したAPI Keyをサーバーのenvファイルを更新します。
更新後は必ず変更のCommit及びPushを行ってください。

SERVER_ROOT/src/app/.env

# SendGrid Config
SEND_GRID_API_KEY=ここにAPI Keyを設定

以上でメールプラグインの初期設定は完了です。
SwaggerUIを利用してメール送信の挙動を確認しましょう。

メールプラグインの使い方

メールプラグインはA.クライアントからのAPI経由または、B.サーバーの他API呼び出し時にメール送信処理を入れ込むことで利用可能です。
セキュリティ上の観点からAPIを一般公開するようなプロジェクトでは、後者のB.他API呼び出し時にメール送信処理を入れ込むことをお勧めします。

A. クライアントからの利用

MailAPIのsendMailに送信するメールに関する情報を指定します。

async sendMail() {
  await new MailApi().sendMail({
    body: {
      fromName: 'Admin', // 送信元の名前
      fromAddress: 'noreply@example.com', // 送信元のメールアドレス
      toName: 'User', // 送信先の名前
      toAddress: 'client@example.com', // 送信先のメールアドレス
      subject: 'Mail Title', // メールの題名
      content: 'Hello World!', // メールの本文
      htmlContent: '<html><body>Hello World!</body></html>' // メールの本文(HTML)
    }
  })
}

クライアントからの呼び出しは、テスト用にメールの送信処理を組み込みたい場合や、ユーザーが指定したメールアドレスにメールを送信する場合等に有用です。
ただし、前途した通り、MailAPIのsendMailが一般公開されている場合はAPIを呼び出すことで自由にメールの送信が可能になってしまいますので注意が必要です。(APIが一般公開されない限定されたプロジェクトの場合は問題ない可能性もあります。)

B. サーバーからの利用

送信処理を入れ込みたいxxx_handler.go等に実装を行います。

SERVER_ROOT/src/app/hanlder/xxx_handler.go等

func (h *xxxHandler) sendMail() (*rest.Response, error) {
	res, err := h.sm.Mail.SendMail(&model.Mail{
		FromName:    "Admin", // 送信元の名前
		FromAddress: "noreply@example.com", // 送信元のメールアドレス
		ToName:      "User", // 送信先の名前
		ToAddress:   "client@example.com", // 送信先のメールアドレス
		Subject:     "Mail Title", // メールの題名
		Content:     "Hello World!", // メールの本文
		HTMLContent: "<html><body>Hello World!</body></html>", // メールの本文(HTML)
	})
	return res, err
}

サーバーからの呼び出しは、特定のレコードが登録された際や更新、削除された場合にメールを送信するケースや、他プラグインが呼び出された際にメールを送信することが実現可能です。