ダミーSMTPサーバ(smtp4dev)

# はじめに
開発でメール送信のテストをするのに会社のメールサーバを使うのも良くないですし、間違ってお客さんのメールに送ってしまうという事故を防ぐためにダミーSMTPサーバがないかと思い調べたら[smtp4dev](https://github.com/rnwood/smtp4dev)というダミーSMTPサーバーがあったので使い方を説明する。
.NET Coreで作られているので、Windows、Linux、Mac OS-X（および.NET Coreを利用）で動作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/0fced4df-1a60-299a-f9e0-78d02079a72c.png)


# 概要
今回は**Windows10**にインストールしてから動作テストまでを説明します。
古いバージョンでは、Windows GUIベース([ここ](https://github.com/rnwood/smtp4dev/releases/tag/v2.0.10))のがありますが、今回は、exe実行して、ダミーSMTPサービスを立ち上げて、ブラウザでメールの受信状況を確認できます。
https://github.com/rnwood/smtp4dev

# インストール(WindowsPCで直接実行)

## 1.GitHubからプログラムをダウンロード
- リンクはGithubのreleasesからダウンロード([ここ](https://github.com/rnwood/smtp4dev/releases))


- 今回はwindows10なのでx64ベースをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/08af426c-6c24-d0f2-1a11-20f9ff150dd3.png)


- ダウンロードしたファイルを解凍

## 2.Rnwood.Smtp4dev.exeを実行

1.Smtp4dev.exeを実行
ダウンロードしたファイルを解凍して、中にあるRnwood.Smtp4dev.exe を実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/ee9049fe-72e3-f975-de3a-b2fef83502ea.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/33220c59-6c2f-41da-8ef1-519ed9e5703c.png)


4.ブラウザでサーバが立ち上がっているか確認

## 3.動作テスト

- Powrshellの権限変更
PowerShellを実行したことがないPCであれば実行ポリシーによりメールの実行テストをすることができないので、下記のサイトで変更をする
[PowerShell のスクリプトが実行できない場合の対処方法](https://qiita.com/Targityen/items/3d2e0b5b0b7b04963750)




1.PowerShell ISEを起動

2.下記のメール送信用のスクリプトをPowerShell ISEに貼り付け、実行ボタンを押す

```powershell
param($count=1)

1..$count | %{ 
    write-host $_
    Send-MailMessage -To foo@bar.com `
    -From from@from.com `
    -Subject "Subject:メールタイトル $_" `
    -Body "Body：メール本文" -Encoding "utf8" `
    -Port "25" `
    -SmtpServer localhost
}

```

認証でエラーが出る場合は下記

```powershell

# 認証情報の設定
$username = "from@example.com"  # 使用するSMTPサーバーのユーザー名　これでOK
$password = "yourpasWord"      # 使用するSMTPサーバーのパスワード　これでOK

# パスワードをSecureStringに変換
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force

# 認証情報を作成
$credential = New-Object System.Management.Automation.PSCredential($username, $securePassword)

# 送信メールの設定
$ToADDR   = "to@example.com"
$FromADDR = "from@example.com"
$SMTPHost = "localhost"
$PortNum  = "25"  # 2525 など必要なポート番号に調整可能
$Subject  = "smtp4devのテスト"
$MailBody = "これはテストメールです1"

# メール送信
Send-MailMessage -To $ToADDR `
                 -From $FromADDR `
                 -SmtpServer $SMTPHost `
                 -Port $PortNum `
                 -Subject "$Subject" `
                 -Body $MailBody `
                 -Encoding UTF8 `
                 -Credential $credential
                 #-UseSsl  # 必要に応じてSSL接続


```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/47a6293d-afa0-e6e4-e3a9-f1981fbd0caa.png)


3.Browserに下記のURLを貼り付けてメールが届いている確認できる
http://localhost:5000/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/0d4d615b-b6c1-51b4-1d7d-a4cfaf38fb74.png)

# インストール（Dockerバージョン）
- exeを起動するのに.net Coreのモジュールが必要でしたが、こちらはDockerをインストールしてコマンド実行するだけで環境を構築することができます。

## 1.Docker-composeファイルのダウンロード

製作者のサイトに[docker-compose.yml](https://github.com/rnwood/smtp4dev/blob/master/docker-compose.yml)のファイルが
あるのでダウンロードしてください。
下記は、不要なコメントを削除したものになります。今回は下記のdocker-compose.ymlを実行しました。
```Dockerfile
version: '3'

services:
  smtp4dev:
    image: rnwood/smtp4dev:v3
    restart: always
    ports:
      # Change the number before : to the port the web interface should be accessible on
      - '5000:80'
      # Change the number before : to the port the SMTP server should be accessible on
      - '25:25'
      # Change the number before : to the port the IMAP server should be accessible on
      - '143:143'
    volumes:
      # This is where smtp4dev stores the database..
        - smtp4dev-data:/smtp4dev
    environment:
      #Specifies the server hostname. Used in auto-generated TLS certificate if enabled.
      - ServerOptions__HostName=smtp4dev
volumes:
  smtp4dev-data:

```

## 2.Dockerコマンドの実行
- Dockerをインストールしていれば、コマンドプロンプトからでも構いません。
今回はVS　Codeのターミナルから実行します。
```bash
docker-compose up
```
- 下記は実行結果です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/eff7bd4e-02ad-0bf5-9339-3a6aa8c16041.png)

## 3.動作テスト
1.Powershell ISEから下記のコマンドを実行
```powershell
param($count=1)

1..$count | %{ 
    write-host $_
    Send-MailMessage -To foo@bar.com -From from@from.com -Subject "Subject:メールタイトル $_" -Body "Body：メール本文" -Encoding "utf8" -SmtpServer localhost
}


```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/47a6293d-afa0-e6e4-e3a9-f1981fbd0caa.png)

2.Browserに下記のURLを貼り付けてメールが届いている確認できる
http://localhost:5000/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/d80651f3-f09e-7b6b-1221-7d99f78e3a62.png)

# smtp4devのSettingsについて

## General
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47172/6619828c-ec13-4443-95ad-1da99a121431.png)
- Require Authentication (SMTP, IMAP)・・・OFFにすると認証が不要になる。

# その他のダミーSMTPサーバ
[SendGrid記事　メールのテストをする方法](https://sendgrid.kke.co.jp/blog/?p=10535)

https://qiita.com/yaginagi/items/a670e58d1faec94fe089