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

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

この記事は1年前の記事です。当時の情報、理解に基づいておりますのでご留意ください

はじめに

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

Release 20201102 · mayarin/NodejsMySQLDocker
Contribute to mayarin/NodejsMySQLDocker development by creating an account on GitHub.

またdocker-composeでハマった

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

最初の記述が以下のとおり

  mail:
    image: mailhog/mailhog
    ports:
      - 8025:8025
【Node.js+Docker】nodemailer+Docker+MailHogのサンプル - 開発覚書はてな版
概要 Docker 上に MailHog を立ち上げて、そこに対してメールを送信するサンプルです。 メールは nodemailer を使用して送信します。 MailHog起動中は をブラウザで開くと送信メールの確認が出来ます。 実行環境 Node.js - 10.x Docker - 19.x Docker Comp...

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でユーザー登録機能(メール認証つき、ダウンロード可) – console dot log

あと残り作業

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

Release 20201106 · mayarin/NodejsMySQLDocker
Contribute to mayarin/NodejsMySQLDocker development by creating an account on GitHub.

コメント

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