ダミーアドレス宛にメール送信、受信メール確認まで (Ubuntu20.04.4 × fakeSMTP)

## やったこと
- 端末からダミーアドレス宛にメール送信および受信メールの内容確認まで

## バージョン情報
- Ubuntu20.04.4

以下コマンドで確認可能
```shell
cat /etc/issue
```

- fakeSMTP-2.0

[ダウンロードページ](http://nilhcem.com/FakeSMTP/download.html)に飛んで見出し「Download」下の `here` となっているリンクをクリックしてzipファイルを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/36abe13e-d740-57db-93ef-0487d3edd18d.png)

## ハマったこと
以下3つのメール送信コマンドをインストールしてみたが全て上手くいかなかった。
- mailutils (何ならインストール時点で「問題を解決することができません。壊れた変更禁止パッケージがあります。」のエラーに苦戦)
[こちら](https://scrapbox.io/programming-notes/%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E6%B1%BA%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E5%A3%8A%E3%82%8C%E3%81%9F%E5%A4%89%E6%9B%B4%E7%A6%81%E6%AD%A2%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)のサイトを参考にインストールまでは出来たがportを指定したメール送信が出来なかったので後からアンインストール。

- Postfix (もしかしたらやりたいことの実現ができそうだったがやりたいこと以上に設定が多くめんどくさそうだったので参考記事だけ幾つか読んで試してはいません。)
- mailx (1.のmailutilsと同様portを指定したメール送信が出来なかった記憶。ちょっと曖昧。とりあえずだめだったのは確かでアンインストール)

## 端末からダミーアドレス宛にメール送信<br>および受信メール内容確認までの手順

#### 1　fakeSMTPのダウンロード
「バージョン情報」記載のfakeSMTPダウンロードページからダウンロードしたzipファイルを任意の場所に展開

```shell
cd 【fakeSMTP-latest.zipの上位のディレクトリ】

unzip fakeSMTP-latest.zip

ls -la
合計 3456
drwxr-xr-x  2 yt yt    4096  7月 24 01:56 .
drwxr-xr-x 45 yt yt    4096  7月 24 01:16 ..
-rw-r--r--  1 yt yt 1848214  5月  9  2015 fakeSMTP-2.0.jar
-rw-rw-r--  1 yt yt 1678306  7月 24 01:54 fakeSMTP-latest.zip
```
jarファイルがあればOK!!

#### 2　s-nailのインストール
s-nailがmailxより強いといった[こちらの記事](https://takuya-1st.hatenablog.jp/entry/2021/11/23/041931)の情報を参考にs-nailのインストール

```shell
sudo apt install s-nail 
```

#### 3　fakeSMTPの起動
　　fakeSMTPをport2525(任意で変更してOK)で起動
　　　カレントディレクトリは展開したfakeSMTP-2.0.jarがあるディレクトリ (つまり手順1のコマンド実行時と同じ場所)
```shell
java -jar fakeSMTP-2.0.jar -b -p 2525 -a localhost -o 【受信メールのパスを任意で指定】
```
上記コマンドの[参考サイト](http://nilhcem.com/FakeSMTP/index.html)(ページ内検索キーワード「java -jar fakeSMTP.jar -s -b -p 2525 -a 127.0.0.1」)
個人的にはGUIが起動するように-bオプションはつけなくても良いかなぁって感じです。

#### 4　テストメール送信
s-nailコマンドでテストメール送信(メール送信用として端末を別でもう一つ起動)

以下コマンドの意味：メールタイトルは「こんちは」、localhostのport番号2525に宛先を`hoge@example.com`としてメールを送信
```shell
s-nail -s "こんちは" -S "smtp=smtp://127.0.0.1:2525" hoge@example.com
```
すると以下のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/2e8d8dca-19b2-d8db-8103-cf31fa43daab.png)
んでctrl + dを入力すると更に以下のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/a347a336-8f63-1e5d-39ac-5d29865c6720.png)

内容的に送信して問題ないのであればyesを入力してEnterをはいドゥーン！！

#### 5　メール送信結果確認
fakeSMTPサーバ起動時に指定したフォルダ配下に拡張子.emlのファイルが届いているかの確認

【届いている】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/317e114c-14ad-8334-4fda-72d10067a5e5.png)

手順の8まで一気に飛んでOK!!
<br>

【届いていない場合、手順3のfakeSMTP-2.0.jar起動時の-bオプションを削除してGUIで起動。それでどうなっているか再度確認】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/3756f3b3-3f90-a3db-8814-ec38bce0211b.png)

受信メッセージ:  xの部分がどうなっているかによって対応することは以下のように分岐します。
- 受信メッセージ:  0(検知すらしていない)であれば手順6
- 受信メッセージ:  1(検知はしているが実体がない)であれば手順7　

#### 6　メールが受信できていない場合
送信時にエラーが出ずに送信が出来たのにfakeSMTP側でもメールが届いたことになっていないのであれば以下コマンドで再度メール送信を試みる

```shell
echo こんちは | s-nail -S mta=smtp://localhost:2525 -S smtp-auth=none -S v15-compat=yes hoge@example.com
```

#### 7　メールの実体がない場合
送信時にエラーが出ずに送信が出来てfakeSMTP側でも受信メッセージ数が増えているのにメールの実体が存在しない場合

fakeSMTP-2.0.jarを起動している側の端末を確認するともしかしたら原因が分かるかも。
ちなみに自分は受信メールのパスを`/home/share/mailbox`にしていた事が原因でメールは送信できてfakeSMTP側でメールの検知まではしているのにメールの実体が存在しないという事態に20分弱ハマっていました。端末のエラー文を確認して別のフォルダを受信メールのパスとして指定することで解決しました。

共有フォルダという通常のフォルダではないことが原因っぽいですが詳細は不明です、、、。

#### 8　メール内容確認
ここまででメールの実体がs-mailコマンドで送信が出来たのであれば後は開いてみて入力したメールの内容になっているかを確認して終了！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457845/b1414191-01f7-39dd-017a-e6e54326b9d3.png)

<hr>
これでfakeSMTPがちゃんと動いていることの確認が取れたので<br>
JavaプログラムからfakeSMTPのダミーアドレスに対してメール送信を試すための下準備が出来ました♪♪
<br><br>
記事内にも幾つか散りばめてはいますが以下参考サイトのまとめです。<br>
★がついている2つが今回の成功の鍵となったサイトで他のサイトはゴールにたどり着くまでの過程で時代の流れなのか、
自分の環境では上手くはいきませんでしたが参考にさせていただいたサイトなどになります。
ありがとうございました。<br><br>

- [Ubuntu のバージョンを確認する方法 | Delft スタック](https://www.delftstack.com/ja/howto/linux/how-to-check-the-version-of-ubuntu/)
- ★[FakeSMTPのダウンロードページ](http://nilhcem.com/FakeSMTP/download.html)
- [問題を解決することができません。壊れた変更禁止パッケージがあります。 - programming-notes](https://scrapbox.io/programming-notes/%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E6%B1%BA%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E5%A3%8A%E3%82%8C%E3%81%9F%E5%A4%89%E6%9B%B4%E7%A6%81%E6%AD%A2%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82)
- [Ubuntu 20 .04にPostfixをインストールして設定 する方法 | DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-20-04-ja)
- [mailxコマンドの使い方 メールを送信する方法 : Linuxコマンド・bashの使い方実例](https://linux-bash.com/archives/8110913.html)
- [Ubuntuでmailコマンドでメール送信できない時に確認すべき事 - 動かざることバグの如し](https://thr3a.hatenablog.com/entry/20181020/1540042220)
- [コマンドラインからメールを送信する方法 – ラボラジアン](https://laboradian.com/send-mail-from-cmd-line/)
- [LinuxのmailコマンドでSMTPサーバを使ってメール送信する (from GCE/nagios) - 元RX-7乗りの適当な日々](https://www.na3.jp/entry/20160531/p1)
- [【Ubuntu】アプリを「削除」アンインストールする方法！コマンドとは？ |](https://osakanav.com/ubuntu-app-uninstall)
- [Linuxのポート状況を確認する](https://www.linuxmaster.jp/linux_skill/2009/02/linux-4.html)
- [Ubuntuでローカルメールを受け取れられるようにする - 身の回り4畳半近辺の日記](https://b3g.hatenablog.com/entry/2021/01/17/215842)
- [Ubuntu20.04に送信専用SMTPサーバーとしてPostfixをインストールして設定する方法 - Dev Guides](https://www.finddevguides.com/Ubuntu20.04%E3%81%AB%E9%80%81%E4%BF%A1%E5%B0%82%E7%94%A8SMTP%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6Postfix%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)
- [Ubuntu日本語フォーラム / .emlファイルを閲覧するには](https://forums.ubuntulinux.jp/viewtopic.php?id=17506)
- ★[さくっとメールを送るコマンド mailx(s-nail/bsd-mailx) - それマグで！](https://takuya-1st.hatenablog.jp/entry/2021/11/23/041931)
- [【FakeSMTP】メールテスト用ツールFakeSMTPをLinuxマシン上で稼働させる - SEワンタンの独学備忘録](https://www.wantanblog.com/entry/2021/06/05/173727)