【Node.js】Docker-composeでMailHogに接続できず手間取った話

研究
OLYMPUS DIGITAL CAMERA
この記事は約3分で読めます。

例によって環境はこの人です。

Release 20201102 · mayarin/NodejsMySQLDocker

You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or window. Reload to refresh your session. Reload to refresh your session.

主な原因はどの道docker-composeの記述です。
本当はアカウント登録時の流れを仮登録メール発信→MailHogでのメール受信→認証メール発信→本登録と言う流れにしようと思い、Node.jsからMailHogへの接続を試していました。
最初の記述が以下のとおり。

  mail:
    image: mailhog/mailhog
    ports:
      - 8025:8025

【Node.js+Docker】nodemailer+Docker+MailHogのサンプル – 開発覚書はてな版

概要 Docker 上に MailHog を立ち上げて、そこに対してメールを送信するサンプルです。 メールは nodemailer を使用して送信します。 MailHog起動中は http://localhost:8025/ をブラウザで開くと送信メールの確認が出来ます。 実行環境 Node.js – 10.x Docker – 19.x Docker Compose – 1.24.x MailHog – latest 使用ライブラリ nodemailer – 6.3.x

SMTPポートを開く旨上記の参考資料にあったので、記述を修正。

  mail:
    image: mailhog/mailhog
    ports:
      - 8025:8025
      - 1025:1025

index.jsを修正。

const nodemailer = require("nodemailer");

const transporter = nodemailer.createTransport({
  host: "mail",
  port: 1025,
  auth: {
    user: 'user',
    pass: 'password',
  }
});

いざ発信を試みると以下の通り叱られる。

UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND mail

ちゃんとmailhogは http://127.0.0.1:8025/ で見えてるんですが…。

Googleを堂々巡りしながら試行したところ
・サービス名が衝突してるだけではないか(←多分違う)
・networksのスコープに入ってないのではないか
と気付き、docker-composeを以下の様に修正。

  mailhog:
    image: mailhog/mailhog
    ports:
      - 8025:8025
      - 1025:1025
    networks:
      - backend

解決。
なお本懐は別サイトを参照し、SequirizeのfindOrCreate を使う方がスマートだと思いほぼ引用で修正しました。

Expressでユーザー登録機能(メール認証つき、ダウンロード可)

こんにちは❗フリーランス・エンジニアの 九保すこひ です。 さてさて、以前このブログで公開した「 コピペでOK!Expressにログイン機能をつくる 」という記事では、ログイン機能をつくってみました。 そして、今回はその続きとして、 ユーザー登録する機能 をご紹介します。 誰でも登録できるオープンなサイトを公開するには、必須の機能ですよね。 そこで! 今回は以下の手順でユーザー登録できるようしてみます。 メールアドレス&パスワードを送信 仮登録完了(本登録メールを送信) メールに書かれたURLをクリック 本登録が完了 ぜひみなさんのお役に立てると嬉しいです😊✨ (最後に今回開発したソースコード一式をダウンロードできます!) 開発環境: Node 8、Express 4.1 今回実装するユーザー登録機能には、以下4つのパッケージが必要になります。 それぞれインストールのコマンドと参考記事を用意しましたので、先に準備しておいてください。 また、テンプレートエンジンは mustacheを使っていますが、 ejsや pugでも実行可能です。詳しくは「 テンプレートエンジン」を使うをご覧ください。(ただし、他のテンプレートエンジンを使う場合はビューの拡張子が.mst ではなくなりますのでご注意ください) データベースを操作するパッケージ。 npm i –save sequelize sudo npm i -g sequelize-cli 【参考記事】 Node.jsにDBマイグレーション、Seed、モデルを用意する「Sequelize」 入力された内容をバリデーションするパッケージ。 npm i –save express-validator 【参考記事】 Expressでバリデーションする「express-validator」 メールを送信するパッケージです。

あと残り作業は
・入力バリデートをHTML5でいいので実装
・パスワードリマインダ
・ログイン中の会員情報の修正
・機能実装(今回は行先掲示板にでもします)
・herokuに公開
・気が向いたらAngularでSPAにしてみる
この辺の予定です。

Release 20201106 · mayarin/NodejsMySQLDocker

You can’t perform that action at this time. You signed in with another tab or window. You signed out in another tab or window. Reload to refresh your session. Reload to refresh your session.

コメント

タイトルとURLをコピーしました