localでメールサーバーを立てる

JavaScript

next-authでマジックリンク認証を使うことがあり、ローカルでメールサーバーを実行したくなったので記録を残しておきます。

MailHog

コンテナがあるので利用します。

docker-compose.yml

version: "3"

services:
  mail:
    image: mailhog/mailhog:latest
    ports:
      - "8025:8025"
      - "1025:1025"
    environment:
      MH_STORAGE: maildir
      MH_MAILDIR_PATH: /tmp
    volumes:
      - mail_volume:/tmp

volumes:
  mail_volume:

.env

# EMAIL_SERVER="smtp://user:pass@mail:1025"
EMAIL_SERVER_USER="user"
EMAIL_SERVER_PASSWORD="pass"
EMAIL_SERVER_HOST="127.0.0.1"
EMAIL_SERVER_PORT="1025"
EMAIL_FROM="noreply@example.com"

next-auth

利用側ではこうします。

export const nextAuthOptions: NextAuthOptions = {
  providers: [
    EmailProvider({
      server: {
        host: process.env.EMAIL_SERVER_HOST,
        port: process.env.EMAIL_SERVER_PORT,
        auth: {
          user: process.env.EMAIL_SERVER_USER,
          pass: process.env.EMAIL_SERVER_PASSWORD,
        },
        secure: process.env.NODE_ENV !== "development",
      },
      from: process.env.EMAIL_FROM,
      maxAge: 7 * 24 * 60 * 60, // 7 days
    }),
  ],
}

詳しくは以下を参照

Build software better, together
GitHubiswherepeoplebuildsoftware.Morethan100millionpeopleuseGitHubtodiscover,fork,andcontributetoover420millionprojects.

email providerはシンプルに以下の指定でも動きます。
resend等のsecure接続が要求される場合は
EMAIL_SERVER="smtps://resend:password@smtp.resend.com:111のようにsmtp”s”にしないとエラーになるので注意!

    EmailProvider({
      server: process.env.EMAIL_SERVER,
      from: process.env.EMAIL_FROM,

メールボックス

http://localhost:8025
にアクセスするとメールボックスが表示されます。

コメント