【Docker】 Go × Mailhog × net/smtpでメール送信する

go エンジニア
記事内に広告が含まれています。

はじめに

Docker環境で構築したGoからメール送信する方法をご紹介します。

メールサーバーには、開発環境でメール送信を確認できるmailhogを使用します。

メール送信には標準パッケージのnet/smtpを用います。

 

今回の実装以外にもいろいろ追加していますが、

下記でメール送信を実装しているので参考にしてみてください!

GitHub - shungo0525/doker_go
Contribute to shungo0525/doker_go development by creating an account on GitHub.

 

コード

ファイル構成

./root_dir
├─ app
│   ├─ main.go
│   ├─ go.mod
│   └─ go.sum
├─ docker-compose.yml
└─ Dockerfile

Dockerfile

とりあえずGoが使える環境を構築します。

FROM golang:1.19-alpine

RUN apk update && apk add git

# appディレクトリの作成
RUN mkdir /go/src/app
# ワーキングディレクトリの設定
WORKDIR /go/src/app

docker-compose.yml

開発環境用のメールサーバーであるmailhogを使用します。

service名のmailhogとSMPTポートである1025はメール送信するときに指定します。

version: '3'
services:
  app:
    build: .
    tty: true
    volumes:
      - ./app:/go/src/app
    depends_on:
      - mysql
    ports:
      - 8000:8000

  mailhog:
    image: mailhog/mailhog:latest
    ports:
      - "8025:8025" # MailhogのWebとAPI用のポート
      - "1025:1025" # SMTPポート

 

main.go

docker-compose.ymlで指定したservice名のmailhogをhostnameに、portを1025に指定します。

docker-compose.ymlの値とここで指定する値が異なるとメール送信できないので注意しましょう。

送信元、送信先、メッセージ内容は必要に応じて変更してください。

package main

import (
  "fmt"
  "net/smtp"
  "os"
  "strings"
)

var (
  hostname = "mailhog" // docker-composeで指定したサービス名
  port     = 1025 // mailhogのSMPTポート
  username = "user@example.com"
  password = "password"
  from     = "from@example.net"
  subject  = "hello"
  body     = "Hello World!"
  receiver = []string{"receiver@example.com"}
)

func main() {
  SendEmail()
}

func SendEmail() {
  smtpServer := fmt.Sprintf("%s:%d", hostname, port)
  auth := smtp.CRAMMD5Auth(username, password)
  msg := []byte(fmt.Sprintf("To: %s\nSubject: %s\n\n%s", strings.Join(receiver, ","), subject, body))

  if err := smtp.SendMail(smtpServer, auth, from, receiver, msg); err != nil {
    fmt.Fprintln(os.Stderr, err)
  }
}

メール送信

コンテナに入りmain.goを実行

コンテナに入ってmain.goを実行することで、SendEmail()が実行されメール送信されます。

% dc exec app sh
# go run main.go

mailhogで送信されたメールを確認

http://localhost:8025/を開くとMailhogでローカル環境で送信したメールを確認することができます。

go-mail-1

クリックすると送信内容の詳細を確認することができます。

 

go-mail-2

コメント