<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mailhog - shungo blog</title>
	<atom:link href="https://shungoblog.com/tag/mailhog/feed" rel="self" type="application/rss+xml" />
	<link>https://shungoblog.com</link>
	<description>しゅんごブログ</description>
	<lastBuildDate>Fri, 02 May 2025 11:19:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://shungoblog.com/wp-content/uploads/2022/04/cropped-IMG_0718-32x32.jpg</url>
	<title>mailhog - shungo blog</title>
	<link>https://shungoblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://shungoblog.com/tag/mailhog/feed"/>
	<item>
		<title>【Docker】 Go × Mailhog × net/smtpでメール送信する</title>
		<link>https://shungoblog.com/programming/docker-go-mailhog-net-smtp.html</link>
					<comments>https://shungoblog.com/programming/docker-go-mailhog-net-smtp.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 14:11:45 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[mailhog]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1967</guid>

					<description><![CDATA[<p>目次 はじめにコードファイル構成Dockerfiledocker-compose.ymlmain.goメール送信コンテナに入りmain.goを実行mailhogで送信されたメールを確認 はじめに Docker環境で構築し [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/docker-go-mailhog-net-smtp.html">【Docker】 Go × Mailhog × net/smtpでメール送信する</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">コード</a><ol><li><a href="#toc3" tabindex="0">ファイル構成</a></li><li><a href="#toc4" tabindex="0">Dockerfile</a></li><li><a href="#toc5" tabindex="0">docker-compose.yml</a></li><li><a href="#toc6" tabindex="0">main.go</a></li></ol></li><li><a href="#toc7" tabindex="0">メール送信</a><ol><li><a href="#toc8" tabindex="0">コンテナに入りmain.goを実行</a></li><li><a href="#toc9" tabindex="0">mailhogで送信されたメールを確認</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>Docker環境で構築したGoからメール送信する方法をご紹介します。</p>
<p>メールサーバーには、開発環境でメール送信を確認できる<a rel="nofollow noopener external" target="_blank" href="https://github.com/mailhog/MailHog">mailhog</a>を使用します。</p>
<p>メール送信には標準パッケージの<a rel="nofollow noopener external" target="_blank" href="https://pkg.go.dev/net/smtp">net/smtp</a>を用います。</p>
<p>&nbsp;</p>
<p>今回の実装以外にもいろいろ追加していますが、</p>
<p>下記でメール送信を実装しているので参考にしてみてください！</p>

<a rel="nofollow noopener external" target="_blank" href="https://github.com/shungo0525/doker_go" title="GitHub - shungo0525/doker_go" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img fetchpriority="high" decoding="async" src="https://shungoblog.com/wp-content/uploads/cocoon-resources/blog-card-cache/803e1b3a18b5f12c742e15f875c82fcb." alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - shungo0525/doker_go</div><div class="blogcard-snippet external-blogcard-snippet">Contribute to shungo0525/doker_go development by creating an account on GitHub.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/shungo0525/doker_go" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>
<p>&nbsp;</p>
<h2><span id="toc2">コード</span></h2>
<h3><span id="toc3">ファイル構成</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-plain" data-lang=""><code>./root_dir
├─ app
│   ├─ main.go
│   ├─ go.mod
│   └─ go.sum
├─ docker-compose.yml
└─ Dockerfile</code></pre>
</div>
<h3><span id="toc4">Dockerfile</span></h3>
<p>とりあえずGoが使える環境を構築します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-plain" data-lang="Dockerfile"><code>FROM golang:1.19-alpine

RUN apk update &amp;&amp; apk add git

# appディレクトリの作成
RUN mkdir /go/src/app
# ワーキングディレクトリの設定
WORKDIR /go/src/app</code></pre>
</div>
<h3><span id="toc5">docker-compose.yml</span></h3>
<p>開発環境用のメールサーバーであるmailhogを使用します。</p>
<p>service名の<strong>mailhog</strong>とSMPTポートである<strong>1025</strong>はメール送信するときに指定します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-yaml" data-lang="docker-compose.yml"><code>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ポート</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc6">main.go</span></h3>
<p><code>docker-compose.yml</code>で指定したservice名の<strong>mailhog</strong>をhostnameに、portを<strong>1025</strong>に指定します。</p>
<p><code>docker-compose.yml</code>の値とここで指定する値が異なるとメール送信できないので注意しましょう。</p>
<p>送信元、送信先、メッセージ内容は必要に応じて変更してください。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-go" data-lang="main.go"><code>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)
  }
}</code></pre>
</div>
<h2><span id="toc7">メール送信</span></h2>
<h3><span id="toc8">コンテナに入りmain.goを実行</span></h3>
<p>コンテナに入って<code>main.go</code>を実行することで、<code>SendEmail()</code>が実行されメール送信されます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% dc exec app sh
# go run main.go</code></pre>
</div>
<h3><span id="toc9">mailhogで送信されたメールを確認</span></h3>
<p><a rel="nofollow noopener external" target="_blank" href="http://localhost:8025/">http://localhost:8025/</a>を開くとMailhogでローカル環境で送信したメールを確認することができます。</p>
<p><img decoding="async" src="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.37-300x88.jpg" alt="go-mail-1" width="955" height="280" class="alignnone wp-image-1976" srcset="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.37-300x88.jpg 300w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.37-1024x300.jpg 1024w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.37-768x225.jpg 768w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.37-1536x450.jpg 1536w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.37.jpg 1920w" sizes="(max-width: 955px) 100vw, 955px" /></p>
<p>クリックすると送信内容の詳細を確認することができます。</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.41-300x88.jpg" alt="go-mail-2" width="1285" height="377" class="alignnone wp-image-1977" srcset="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.41-300x88.jpg 300w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.41-1024x300.jpg 1024w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.41-768x225.jpg 768w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.41-1536x450.jpg 1536w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-22-23.07.41.jpg 1920w" sizes="(max-width: 1285px) 100vw, 1285px" /></p><p>The post <a href="https://shungoblog.com/programming/docker-go-mailhog-net-smtp.html">【Docker】 Go × Mailhog × net/smtpでメール送信する</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/docker-go-mailhog-net-smtp.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
